Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
outdated: fix rendering for global dependencies by zkat · Pull Request #173 · npm/cli · GitHub
Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' outdated: fix rendering for global dependencies by zkat · Pull Request #173 · npm/cli · GitHub
Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' outdated: fix rendering for global dependencies by zkat · Pull Request #173 · npm/cli · GitHub
Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' outdated: fix rendering for global dependencies by zkat · Pull Request #173 · npm/cli · GitHub
Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' outdated: fix rendering for global dependencies by zkat · Pull Request #173 · npm/cli · GitHub
Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' outdated: fix rendering for global dependencies by zkat · Pull Request #173 · npm/cli · GitHub
Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); outdated: fix rendering for global dependencies by zkat · Pull Request #173 · npm/cli · GitHub
Skip to content

outdated: fix rendering for global dependencies - #173

Merged
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated
Mar 19, 2019
Merged

outdated: fix rendering for global dependencies#173
aeschright merged 1 commit into
release-nextfrom
zkat/fix-global-outdated

Conversation

@zkat

@zkatzkat commented Mar 7, 2019

Copy link
Copy Markdown
Contributor

@zkatzkat added the semver:patch semver patch level for changes label Mar 7, 2019
@zkat
zkat requested a review from a team as a code ownerMarch 7, 2019 18:22
@aeschright
aeschright merged commit d075471 into release-nextMar 19, 2019
@aeschright
aeschright deleted the zkat/fix-global-outdated branch March 19, 2019 18:23
@ffxsam

Copy link
Copy Markdown

@zkat Error is back again. npm 6.9.0.

 $ npm outdated -g
npm ERR! Cannot read property 'length' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/samh/.npm/_logs/2019-04-01T12_45_33_869Z-debug.log

Stack:

23 verbose stack TypeError: Cannot read property 'length' of undefined
23 verbose stack at dotindex (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:59:32)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:11:21
23 verbose stack at Array.forEach (<anonymous>)
23 verbose stack at forEach (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:73:31)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:10:9
23 verbose stack at Array.reduce (<anonymous>)
23 verbose stack at reduce (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:63:30)
23 verbose stack at module.exports (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/text-table/index.js:9:20)
23 verbose stack at /Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:130:16
23 verbose stack at cb (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
23 verbose stack at outdated_ (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:221:12)
23 verbose stack at skip (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:343:5)
23 verbose stack at updateDeps (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/lib/outdated.js:446:7)
23 verbose stack at tryCatcher (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
23 verbose stack at Promise.successAdapter [as _fulfillmentHandler0] (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/nodeify.js:23:30)
23 verbose stack at Promise._settlePromise (/Users/samh/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)

@jukben

jukben commented Apr 1, 2019

Copy link
Copy Markdown

Looks like the code is gone https://github.com/npm/cli/blob/latest/lib/outdated.js#L152

It looks it's gonna be fixed in 6.9.1

jukben added a commit to jukben/cli that referenced this pull request Apr 1, 2019
Looks like the code what fixed it is gone. So I reintroduce it. npm#173
@jukbenjukben mentioned this pull request Apr 1, 2019
@jtsom

Copy link
Copy Markdown

Is this issue every going to be released? The latest version of node 11.14.0 includes npm v6.9.0 with this bug...

@Zearin

Copy link
Copy Markdown
Contributor

I just found out I was getting the same error, from the same operation npm [-g] outdated, but from a different function.

  • The function is located in the dependency text-table (see @substack/text-table )

  • The function itself is dotindex()

  • My crappy fix is to change the function to:

functiondotindex(c){varm=/\.[^.]*$/.exec(c);if(m){returnm.index+1}elseif(c!==undefined){returnc.length}elsereturn0}

NOTE: However, I don’t know enough about npm’s architecture to say whether this is actually the correct solution. It may be that the real issue is that npm is calling the dotindex function with a bad value for c.

I’ll let the experts take it from here.

@nikoladev

Copy link
Copy Markdown

@jtsom While we wait for 6.9.1 you can install the next release, which has this fix included.

npm i -g npm@6.9.1-next.0

@Zearin

Copy link
Copy Markdown
Contributor

@nikoladev Thanks! That is awesome :D

@Orel-A

Copy link
Copy Markdown

Why isn't it in @latest yet?

@jtsom

Copy link
Copy Markdown

Hello? Anyone home? Yet another node release (12.3) that includes the broken 6.9.0. What's the hold up?? Having to remember to reinstall a .next.0 version of NPM every time is not ideal.

@Zearin

Copy link
Copy Markdown
Contributor

I’ve been wondering the same thing! So much work has gone into npm, and now I’m afraid that it’s just going to let yarn (ick! 🤢) roll in and take over. :(

@Zearin

Copy link
Copy Markdown
Contributor

This fix was merged on 2019-03-20.

Why hasn’t it been published as a SEMVER-PATCH release yet?

@volschin

Copy link
Copy Markdown

node 10.16 LTS is now also broken, beeing shipped with npm 6.9.0. Please take action.

@aeschright

Copy link
Copy Markdown
Contributor

Hi everyone, here’s an update on what’s been happening with the open PRs https://gist.github.com/aeschright/8ed09cbc2a4aee00fcb4ad35086d76a6

@Zearin

Copy link
Copy Markdown
Contributor

@aeschright Thanks for writing that note. I am so sorry to hear the news.

I really hope the company gets its head back on straight.

@ZuBB

ZuBB commented Jun 27, 2019

Copy link
Copy Markdown

Even with 6.9.1 I have next issue and it looks quite similar to one you fixed here

Screen Shot 2019-06-27 at 19 14 35

Does anyone have any hints on this?

@brimarq

Copy link
Copy Markdown

@ZuBB I was having the same "Cannot read property 'length' of undefined" error when running npm outdated -g with v6.9.0. I just installed v6.9.1 and it works now (at least, for that command). FWIW, I'm using node v10.15.3 installed via nvm on Darwin 17.7.0.

@stanleyxu2005

stanleyxu2005 commented Jun 30, 2019

Copy link
Copy Markdown

@zkat I've just applied your change with the shipped npm v6.9.0 in nodejs v12.5.0. The error message is gone, but the column "Location" shows "global". I expected it to be path/to/npmpkgs.

I would suggest to improve your PR by changing to

// outdated.js L148-153varcolumns=[depname,has||'MISSING',want,latest,deppath||npm.dir// or // deppath || `(global) ${npm.dir}`]

Follow-up Question 1

During the troubleshooting, I see one place potential to be the root cause.

// outdated.js L216-222functionoutdated_(args,path,tree,parentHas,depth,opts,cb){if(!tree.package)tree.package={}if(path&&moduleName(tree))path+=' > '+tree.package.nameif(!path&&moduleName(tree))path=tree.package.name// <---- name set to be path??if(depth>opts.depth){returncb(null,[])}

The function moduleName looks quite wired to me

// utils/module-name.jsvarunknown=0functionmoduleName(tree){if(tree.name){returntree.name}varpkg=tree.package||treeif(isNotEmpty(pkg.name)&&typeofpkg.name==='string')returnpkg.name.trim()varpkgName=pathToPackageName(tree.path)if(pkgName!=='')returnpkgNameif(tree._invalidName!=null)returntree._invalidNametree._invalidName='!invalid#'+(++unknown)returntree._invalidName}

If name is invalid, the function will return tree._invalidName,

  1. so that !path && moduleName(tree) will be true,
  2. so that path = tree.package.name.

Regarding this logic, the variable path could be assigned to an unexpected value, couldn't it?
I noticed the change was introduced by this commit b7b54f2#diff-3d20499d58f14c6f1edfe93d8ba8a8a2

github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 5, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 12, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 22, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 15, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:patchsemver patch level for changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

12 participants

@zkat@ffxsam@jukben@jtsom@Zearin@nikoladev@Orel-A@volschin@aeschright@ZuBB@brimarq@stanleyxu2005