Skip to content

fix(view): dont unwrap arrays in json mode - #7506

Merged
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json
May 11, 2024
Merged

fix(view): dont unwrap arrays in json mode#7506
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json

Conversation

@lukekarrys

@lukekarryslukekarrys commented May 10, 2024

Copy link
Copy Markdown
Contributor

The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.

Fixes#3611

# Before
❯ npm view tiny-tarball versions
1.0.0
❯ npm view tiny-tarball versions --json
"1.0.0"# After
❯ npmlocal view tiny-tarball versions
1.0.0
❯ npmlocal view tiny-tarball versions --json
[
"1.0.0"
]

@lukekarrys
lukekarrys requested a review from a team as a code ownerMay 10, 2024 19:46
@lukekarryslukekarrys changed the title fix(view): dont unwrap arrays in json modifiedfix(view): dont unwrap arrays in json modeMay 10, 2024
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch 2 times, most recently from 986ac2a to 0be70c4CompareMay 10, 2024 19:50
The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.
Fixes#3611
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch from 0be70c4 to d3ec5b5CompareMay 10, 2024 19:52
@npm-cli-bot

npm-cli-bot commented May 10, 2024

Copy link
Copy Markdown
Collaborator

no statistically significant performance changes detected

timing results
app-largecleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest35.938 ±1.0210.448 ±0.0611.486 ±0.041.552 ±0.001.519 ±0.001.266 ±0.018.016 ±0.031.290 ±0.020.138 ±0.000.165 ±0.0113.049 ±0.134.171 ±2.96
#750639.301 ±0.3710.557 ±0.0511.589 ±0.071.538 ±0.041.524 ±0.011.260 ±0.008.147 ±0.071.277 ±0.010.137 ±0.000.163 ±0.0014.469 ±0.142.112 ±0.02
app-mediumcleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest30.000 ±0.977.860 ±0.028.758 ±0.001.488 ±0.021.502 ±0.001.396 ±0.005.801 ±0.011.326 ±0.010.139 ±0.000.169 ±0.009.375 ±0.202.988 ±1.46
#750629.355 ±0.967.845 ±0.048.810 ±0.041.492 ±0.021.487 ±0.001.395 ±0.025.777 ±0.011.288 ±0.030.135 ±0.000.164 ±0.009.640 ±0.051.947 ±0.00

@wraithgar

Copy link
Copy Markdown
Contributor

This feels like one of those incorrect behaviors folks have undoubtedly come to rely on, and this would be a breaking change.

@lukekarrys

lukekarrys commented May 11, 2024

Copy link
Copy Markdown
ContributorAuthor

I'm not so sure, because currently this behavior is impossible to predict unless you know the data being returned. In the case of versions it will only unwrap the array if the package has only one version. It will properly keep it as an array for packages with multiple versions. So I think it's unlikely people are relying on this as they would still need to handle when versions returns an array.

# before
❯ npm view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]
# after
❯ npmlocal view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]

@ljharb

Copy link
Copy Markdown
Contributor

If they did the smart thing and always wrapped the field in [].concat() then this wouldn’t break them, at least :-)

@lukekarrys
lukekarrys merged commit e40454c into latestMay 11, 2024
@lukekarrys
lukekarrys deleted the lk/view-versions-json branch May 11, 2024 07:38
@github-actionsgithub-actionsBot mentioned this pull request May 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] npm view $package versions --json returns non-JSON string for packages with only one version

4 participants

@lukekarrys@npm-cli-bot@wraithgar@ljharb
, '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" + '
fix(view): dont unwrap arrays in json mode by lukekarrys · Pull Request #7506 · npm/cli · GitHub
Skip to content

fix(view): dont unwrap arrays in json mode - #7506

Merged
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json
May 11, 2024
Merged

fix(view): dont unwrap arrays in json mode#7506
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json

Conversation

@lukekarrys

@lukekarryslukekarrys commented May 10, 2024

Copy link
Copy Markdown
Contributor

The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.

Fixes#3611

# Before
❯ npm view tiny-tarball versions
1.0.0
❯ npm view tiny-tarball versions --json
"1.0.0"# After
❯ npmlocal view tiny-tarball versions
1.0.0
❯ npmlocal view tiny-tarball versions --json
[
"1.0.0"
]

@lukekarrys
lukekarrys requested a review from a team as a code ownerMay 10, 2024 19:46
@lukekarryslukekarrys changed the title fix(view): dont unwrap arrays in json modifiedfix(view): dont unwrap arrays in json modeMay 10, 2024
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch 2 times, most recently from 986ac2a to 0be70c4CompareMay 10, 2024 19:50
The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.
Fixes#3611
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch from 0be70c4 to d3ec5b5CompareMay 10, 2024 19:52
@npm-cli-bot

npm-cli-bot commented May 10, 2024

Copy link
Copy Markdown
Collaborator

no statistically significant performance changes detected

timing results
app-largecleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest35.938 ±1.0210.448 ±0.0611.486 ±0.041.552 ±0.001.519 ±0.001.266 ±0.018.016 ±0.031.290 ±0.020.138 ±0.000.165 ±0.0113.049 ±0.134.171 ±2.96
#750639.301 ±0.3710.557 ±0.0511.589 ±0.071.538 ±0.041.524 ±0.011.260 ±0.008.147 ±0.071.277 ±0.010.137 ±0.000.163 ±0.0014.469 ±0.142.112 ±0.02
app-mediumcleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest30.000 ±0.977.860 ±0.028.758 ±0.001.488 ±0.021.502 ±0.001.396 ±0.005.801 ±0.011.326 ±0.010.139 ±0.000.169 ±0.009.375 ±0.202.988 ±1.46
#750629.355 ±0.967.845 ±0.048.810 ±0.041.492 ±0.021.487 ±0.001.395 ±0.025.777 ±0.011.288 ±0.030.135 ±0.000.164 ±0.009.640 ±0.051.947 ±0.00

@wraithgar

Copy link
Copy Markdown
Contributor

This feels like one of those incorrect behaviors folks have undoubtedly come to rely on, and this would be a breaking change.

@lukekarrys

lukekarrys commented May 11, 2024

Copy link
Copy Markdown
ContributorAuthor

I'm not so sure, because currently this behavior is impossible to predict unless you know the data being returned. In the case of versions it will only unwrap the array if the package has only one version. It will properly keep it as an array for packages with multiple versions. So I think it's unlikely people are relying on this as they would still need to handle when versions returns an array.

# before
❯ npm view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]
# after
❯ npmlocal view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]

@ljharb

Copy link
Copy Markdown
Contributor

If they did the smart thing and always wrapped the field in [].concat() then this wouldn’t break them, at least :-)

@lukekarrys
lukekarrys merged commit e40454c into latestMay 11, 2024
@lukekarrys
lukekarrys deleted the lk/view-versions-json branch May 11, 2024 07:38
@github-actionsgithub-actionsBot mentioned this pull request May 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] npm view $package versions --json returns non-JSON string for packages with only one version

4 participants

@lukekarrys@npm-cli-bot@wraithgar@ljharb
, '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('^' + ".*" + ' fix(view): dont unwrap arrays in json mode by lukekarrys · Pull Request #7506 · npm/cli · GitHub
Skip to content

fix(view): dont unwrap arrays in json mode - #7506

Merged
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json
May 11, 2024
Merged

fix(view): dont unwrap arrays in json mode#7506
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json

Conversation

@lukekarrys

@lukekarryslukekarrys commented May 10, 2024

Copy link
Copy Markdown
Contributor

The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.

Fixes#3611

# Before
❯ npm view tiny-tarball versions
1.0.0
❯ npm view tiny-tarball versions --json
"1.0.0"# After
❯ npmlocal view tiny-tarball versions
1.0.0
❯ npmlocal view tiny-tarball versions --json
[
"1.0.0"
]

@lukekarrys
lukekarrys requested a review from a team as a code ownerMay 10, 2024 19:46
@lukekarryslukekarrys changed the title fix(view): dont unwrap arrays in json modifiedfix(view): dont unwrap arrays in json modeMay 10, 2024
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch 2 times, most recently from 986ac2a to 0be70c4CompareMay 10, 2024 19:50
The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.
Fixes#3611
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch from 0be70c4 to d3ec5b5CompareMay 10, 2024 19:52
@npm-cli-bot

npm-cli-bot commented May 10, 2024

Copy link
Copy Markdown
Collaborator

no statistically significant performance changes detected

timing results
app-largecleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest35.938 ±1.0210.448 ±0.0611.486 ±0.041.552 ±0.001.519 ±0.001.266 ±0.018.016 ±0.031.290 ±0.020.138 ±0.000.165 ±0.0113.049 ±0.134.171 ±2.96
#750639.301 ±0.3710.557 ±0.0511.589 ±0.071.538 ±0.041.524 ±0.011.260 ±0.008.147 ±0.071.277 ±0.010.137 ±0.000.163 ±0.0014.469 ±0.142.112 ±0.02
app-mediumcleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest30.000 ±0.977.860 ±0.028.758 ±0.001.488 ±0.021.502 ±0.001.396 ±0.005.801 ±0.011.326 ±0.010.139 ±0.000.169 ±0.009.375 ±0.202.988 ±1.46
#750629.355 ±0.967.845 ±0.048.810 ±0.041.492 ±0.021.487 ±0.001.395 ±0.025.777 ±0.011.288 ±0.030.135 ±0.000.164 ±0.009.640 ±0.051.947 ±0.00

@wraithgar

Copy link
Copy Markdown
Contributor

This feels like one of those incorrect behaviors folks have undoubtedly come to rely on, and this would be a breaking change.

@lukekarrys

lukekarrys commented May 11, 2024

Copy link
Copy Markdown
ContributorAuthor

I'm not so sure, because currently this behavior is impossible to predict unless you know the data being returned. In the case of versions it will only unwrap the array if the package has only one version. It will properly keep it as an array for packages with multiple versions. So I think it's unlikely people are relying on this as they would still need to handle when versions returns an array.

# before
❯ npm view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]
# after
❯ npmlocal view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]

@ljharb

Copy link
Copy Markdown
Contributor

If they did the smart thing and always wrapped the field in [].concat() then this wouldn’t break them, at least :-)

@lukekarrys
lukekarrys merged commit e40454c into latestMay 11, 2024
@lukekarrys
lukekarrys deleted the lk/view-versions-json branch May 11, 2024 07:38
@github-actionsgithub-actionsBot mentioned this pull request May 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] npm view $package versions --json returns non-JSON string for packages with only one version

4 participants

@lukekarrys@npm-cli-bot@wraithgar@ljharb
, '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('^' + ".*" + ' fix(view): dont unwrap arrays in json mode by lukekarrys · Pull Request #7506 · npm/cli · GitHub
Skip to content

fix(view): dont unwrap arrays in json mode - #7506

Merged
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json
May 11, 2024
Merged

fix(view): dont unwrap arrays in json mode#7506
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json

Conversation

@lukekarrys

@lukekarryslukekarrys commented May 10, 2024

Copy link
Copy Markdown
Contributor

The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.

Fixes#3611

# Before
❯ npm view tiny-tarball versions
1.0.0
❯ npm view tiny-tarball versions --json
"1.0.0"# After
❯ npmlocal view tiny-tarball versions
1.0.0
❯ npmlocal view tiny-tarball versions --json
[
"1.0.0"
]

@lukekarrys
lukekarrys requested a review from a team as a code ownerMay 10, 2024 19:46
@lukekarryslukekarrys changed the title fix(view): dont unwrap arrays in json modifiedfix(view): dont unwrap arrays in json modeMay 10, 2024
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch 2 times, most recently from 986ac2a to 0be70c4CompareMay 10, 2024 19:50
The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.
Fixes#3611
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch from 0be70c4 to d3ec5b5CompareMay 10, 2024 19:52
@npm-cli-bot

npm-cli-bot commented May 10, 2024

Copy link
Copy Markdown
Collaborator

no statistically significant performance changes detected

timing results
app-largecleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest35.938 ±1.0210.448 ±0.0611.486 ±0.041.552 ±0.001.519 ±0.001.266 ±0.018.016 ±0.031.290 ±0.020.138 ±0.000.165 ±0.0113.049 ±0.134.171 ±2.96
#750639.301 ±0.3710.557 ±0.0511.589 ±0.071.538 ±0.041.524 ±0.011.260 ±0.008.147 ±0.071.277 ±0.010.137 ±0.000.163 ±0.0014.469 ±0.142.112 ±0.02
app-mediumcleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest30.000 ±0.977.860 ±0.028.758 ±0.001.488 ±0.021.502 ±0.001.396 ±0.005.801 ±0.011.326 ±0.010.139 ±0.000.169 ±0.009.375 ±0.202.988 ±1.46
#750629.355 ±0.967.845 ±0.048.810 ±0.041.492 ±0.021.487 ±0.001.395 ±0.025.777 ±0.011.288 ±0.030.135 ±0.000.164 ±0.009.640 ±0.051.947 ±0.00

@wraithgar

Copy link
Copy Markdown
Contributor

This feels like one of those incorrect behaviors folks have undoubtedly come to rely on, and this would be a breaking change.

@lukekarrys

lukekarrys commented May 11, 2024

Copy link
Copy Markdown
ContributorAuthor

I'm not so sure, because currently this behavior is impossible to predict unless you know the data being returned. In the case of versions it will only unwrap the array if the package has only one version. It will properly keep it as an array for packages with multiple versions. So I think it's unlikely people are relying on this as they would still need to handle when versions returns an array.

# before
❯ npm view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]
# after
❯ npmlocal view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]

@ljharb

Copy link
Copy Markdown
Contributor

If they did the smart thing and always wrapped the field in [].concat() then this wouldn’t break them, at least :-)

@lukekarrys
lukekarrys merged commit e40454c into latestMay 11, 2024
@lukekarrys
lukekarrys deleted the lk/view-versions-json branch May 11, 2024 07:38
@github-actionsgithub-actionsBot mentioned this pull request May 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] npm view $package versions --json returns non-JSON string for packages with only one version

4 participants

@lukekarrys@npm-cli-bot@wraithgar@ljharb
, '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" + ' fix(view): dont unwrap arrays in json mode by lukekarrys · Pull Request #7506 · npm/cli · GitHub
Skip to content

fix(view): dont unwrap arrays in json mode - #7506

Merged
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json
May 11, 2024
Merged

fix(view): dont unwrap arrays in json mode#7506
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json

Conversation

@lukekarrys

@lukekarryslukekarrys commented May 10, 2024

Copy link
Copy Markdown
Contributor

The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.

Fixes#3611

# Before
❯ npm view tiny-tarball versions
1.0.0
❯ npm view tiny-tarball versions --json
"1.0.0"# After
❯ npmlocal view tiny-tarball versions
1.0.0
❯ npmlocal view tiny-tarball versions --json
[
"1.0.0"
]

@lukekarrys
lukekarrys requested a review from a team as a code ownerMay 10, 2024 19:46
@lukekarryslukekarrys changed the title fix(view): dont unwrap arrays in json modifiedfix(view): dont unwrap arrays in json modeMay 10, 2024
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch 2 times, most recently from 986ac2a to 0be70c4CompareMay 10, 2024 19:50
The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.
Fixes#3611
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch from 0be70c4 to d3ec5b5CompareMay 10, 2024 19:52
@npm-cli-bot

npm-cli-bot commented May 10, 2024

Copy link
Copy Markdown
Collaborator

no statistically significant performance changes detected

timing results
app-largecleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest35.938 ±1.0210.448 ±0.0611.486 ±0.041.552 ±0.001.519 ±0.001.266 ±0.018.016 ±0.031.290 ±0.020.138 ±0.000.165 ±0.0113.049 ±0.134.171 ±2.96
#750639.301 ±0.3710.557 ±0.0511.589 ±0.071.538 ±0.041.524 ±0.011.260 ±0.008.147 ±0.071.277 ±0.010.137 ±0.000.163 ±0.0014.469 ±0.142.112 ±0.02
app-mediumcleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest30.000 ±0.977.860 ±0.028.758 ±0.001.488 ±0.021.502 ±0.001.396 ±0.005.801 ±0.011.326 ±0.010.139 ±0.000.169 ±0.009.375 ±0.202.988 ±1.46
#750629.355 ±0.967.845 ±0.048.810 ±0.041.492 ±0.021.487 ±0.001.395 ±0.025.777 ±0.011.288 ±0.030.135 ±0.000.164 ±0.009.640 ±0.051.947 ±0.00

@wraithgar

Copy link
Copy Markdown
Contributor

This feels like one of those incorrect behaviors folks have undoubtedly come to rely on, and this would be a breaking change.

@lukekarrys

lukekarrys commented May 11, 2024

Copy link
Copy Markdown
ContributorAuthor

I'm not so sure, because currently this behavior is impossible to predict unless you know the data being returned. In the case of versions it will only unwrap the array if the package has only one version. It will properly keep it as an array for packages with multiple versions. So I think it's unlikely people are relying on this as they would still need to handle when versions returns an array.

# before
❯ npm view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]
# after
❯ npmlocal view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]

@ljharb

Copy link
Copy Markdown
Contributor

If they did the smart thing and always wrapped the field in [].concat() then this wouldn’t break them, at least :-)

@lukekarrys
lukekarrys merged commit e40454c into latestMay 11, 2024
@lukekarrys
lukekarrys deleted the lk/view-versions-json branch May 11, 2024 07:38
@github-actionsgithub-actionsBot mentioned this pull request May 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] npm view $package versions --json returns non-JSON string for packages with only one version

4 participants

@lukekarrys@npm-cli-bot@wraithgar@ljharb
, '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('^' + ".*" + ' fix(view): dont unwrap arrays in json mode by lukekarrys · Pull Request #7506 · npm/cli · GitHub
Skip to content

fix(view): dont unwrap arrays in json mode - #7506

Merged
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json
May 11, 2024
Merged

fix(view): dont unwrap arrays in json mode#7506
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json

Conversation

@lukekarrys

@lukekarryslukekarrys commented May 10, 2024

Copy link
Copy Markdown
Contributor

The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.

Fixes#3611

# Before
❯ npm view tiny-tarball versions
1.0.0
❯ npm view tiny-tarball versions --json
"1.0.0"# After
❯ npmlocal view tiny-tarball versions
1.0.0
❯ npmlocal view tiny-tarball versions --json
[
"1.0.0"
]

@lukekarrys
lukekarrys requested a review from a team as a code ownerMay 10, 2024 19:46
@lukekarryslukekarrys changed the title fix(view): dont unwrap arrays in json modifiedfix(view): dont unwrap arrays in json modeMay 10, 2024
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch 2 times, most recently from 986ac2a to 0be70c4CompareMay 10, 2024 19:50
The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.
Fixes#3611
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch from 0be70c4 to d3ec5b5CompareMay 10, 2024 19:52
@npm-cli-bot

npm-cli-bot commented May 10, 2024

Copy link
Copy Markdown
Collaborator

no statistically significant performance changes detected

timing results
app-largecleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest35.938 ±1.0210.448 ±0.0611.486 ±0.041.552 ±0.001.519 ±0.001.266 ±0.018.016 ±0.031.290 ±0.020.138 ±0.000.165 ±0.0113.049 ±0.134.171 ±2.96
#750639.301 ±0.3710.557 ±0.0511.589 ±0.071.538 ±0.041.524 ±0.011.260 ±0.008.147 ±0.071.277 ±0.010.137 ±0.000.163 ±0.0014.469 ±0.142.112 ±0.02
app-mediumcleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest30.000 ±0.977.860 ±0.028.758 ±0.001.488 ±0.021.502 ±0.001.396 ±0.005.801 ±0.011.326 ±0.010.139 ±0.000.169 ±0.009.375 ±0.202.988 ±1.46
#750629.355 ±0.967.845 ±0.048.810 ±0.041.492 ±0.021.487 ±0.001.395 ±0.025.777 ±0.011.288 ±0.030.135 ±0.000.164 ±0.009.640 ±0.051.947 ±0.00

@wraithgar

Copy link
Copy Markdown
Contributor

This feels like one of those incorrect behaviors folks have undoubtedly come to rely on, and this would be a breaking change.

@lukekarrys

lukekarrys commented May 11, 2024

Copy link
Copy Markdown
ContributorAuthor

I'm not so sure, because currently this behavior is impossible to predict unless you know the data being returned. In the case of versions it will only unwrap the array if the package has only one version. It will properly keep it as an array for packages with multiple versions. So I think it's unlikely people are relying on this as they would still need to handle when versions returns an array.

# before
❯ npm view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]
# after
❯ npmlocal view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]

@ljharb

Copy link
Copy Markdown
Contributor

If they did the smart thing and always wrapped the field in [].concat() then this wouldn’t break them, at least :-)

@lukekarrys
lukekarrys merged commit e40454c into latestMay 11, 2024
@lukekarrys
lukekarrys deleted the lk/view-versions-json branch May 11, 2024 07:38
@github-actionsgithub-actionsBot mentioned this pull request May 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] npm view $package versions --json returns non-JSON string for packages with only one version

4 participants

@lukekarrys@npm-cli-bot@wraithgar@ljharb
, '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); } })(); })(); fix(view): dont unwrap arrays in json mode by lukekarrys · Pull Request #7506 · npm/cli · GitHub
Skip to content

fix(view): dont unwrap arrays in json mode - #7506

Merged
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json
May 11, 2024
Merged

fix(view): dont unwrap arrays in json mode#7506
lukekarrys merged 1 commit into
latestfrom
lk/view-versions-json

Conversation

@lukekarrys

@lukekarryslukekarrys commented May 10, 2024

Copy link
Copy Markdown
Contributor

The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.

Fixes#3611

# Before
❯ npm view tiny-tarball versions
1.0.0
❯ npm view tiny-tarball versions --json
"1.0.0"# After
❯ npmlocal view tiny-tarball versions
1.0.0
❯ npmlocal view tiny-tarball versions --json
[
"1.0.0"
]

@lukekarrys
lukekarrys requested a review from a team as a code ownerMay 10, 2024 19:46
@lukekarryslukekarrys changed the title fix(view): dont unwrap arrays in json modifiedfix(view): dont unwrap arrays in json modeMay 10, 2024
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch 2 times, most recently from 986ac2a to 0be70c4CompareMay 10, 2024 19:50
The view command alters the data by default to unwrap single item arrays
when in human readable mode (the default). This change makes it so those
arrays are not altered when the --json flag is set.
Fixes#3611
@lukekarrys
lukekarrysforce-pushed the lk/view-versions-json branch from 0be70c4 to d3ec5b5CompareMay 10, 2024 19:52
@npm-cli-bot

npm-cli-bot commented May 10, 2024

Copy link
Copy Markdown
Collaborator

no statistically significant performance changes detected

timing results
app-largecleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest35.938 ±1.0210.448 ±0.0611.486 ±0.041.552 ±0.001.519 ±0.001.266 ±0.018.016 ±0.031.290 ±0.020.138 ±0.000.165 ±0.0113.049 ±0.134.171 ±2.96
#750639.301 ±0.3710.557 ±0.0511.589 ±0.071.538 ±0.041.524 ±0.011.260 ±0.008.147 ±0.071.277 ±0.010.137 ±0.000.163 ±0.0014.469 ±0.142.112 ±0.02
app-mediumcleanlock-onlycache-onlymodules-onlyno-lockno-cacheno-modulesno-cleanshow-versionrun-scriptcache-only
peer-deps
no-clean
audit
npm@latest30.000 ±0.977.860 ±0.028.758 ±0.001.488 ±0.021.502 ±0.001.396 ±0.005.801 ±0.011.326 ±0.010.139 ±0.000.169 ±0.009.375 ±0.202.988 ±1.46
#750629.355 ±0.967.845 ±0.048.810 ±0.041.492 ±0.021.487 ±0.001.395 ±0.025.777 ±0.011.288 ±0.030.135 ±0.000.164 ±0.009.640 ±0.051.947 ±0.00

@wraithgar

Copy link
Copy Markdown
Contributor

This feels like one of those incorrect behaviors folks have undoubtedly come to rely on, and this would be a breaking change.

@lukekarrys

lukekarrys commented May 11, 2024

Copy link
Copy Markdown
ContributorAuthor

I'm not so sure, because currently this behavior is impossible to predict unless you know the data being returned. In the case of versions it will only unwrap the array if the package has only one version. It will properly keep it as an array for packages with multiple versions. So I think it's unlikely people are relying on this as they would still need to handle when versions returns an array.

# before
❯ npm view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]
# after
❯ npmlocal view abbrev versions --json
[
"1.0.3",
"1.0.4",
"1.0.5",
"1.0.6",
"1.0.7",
"1.0.9",
"1.1.0",
"1.1.1",
"2.0.0"
]

@ljharb

Copy link
Copy Markdown
Contributor

If they did the smart thing and always wrapped the field in [].concat() then this wouldn’t break them, at least :-)

@lukekarrys
lukekarrys merged commit e40454c into latestMay 11, 2024
@lukekarrys
lukekarrys deleted the lk/view-versions-json branch May 11, 2024 07:38
@github-actionsgithub-actionsBot mentioned this pull request May 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] npm view $package versions --json returns non-JSON string for packages with only one version

4 participants

@lukekarrys@npm-cli-bot@wraithgar@ljharb