Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

@jamesopstad@UlisesGascon@sheplu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

@jamesopstad@UlisesGascon@sheplu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

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

Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

@jamesopstad@UlisesGascon@sheplu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

@jamesopstad@UlisesGascon@sheplu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

@jamesopstad@UlisesGascon@sheplu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

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

Update http-errors to v2 - #37

Open
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors
Open

Update http-errors to v2#37
jamesopstad wants to merge 5 commits into
jshttp:masterfrom
jamesopstad:update-http-errors

Conversation

@jamesopstad

Copy link
Copy Markdown

Fixes#19

This updates http-errors to v2. Koa depends on both http-assert and http-errors so this ensures that http-errors resolves to the same version. Currently, users end up with two different copies of http-errors, which can lead to some strange behaviours. Additionally, use of eval was removed in the http-errors upgrade (via an upgrade to depd) so this will resolve security warnings and compatibility issues with Cloudflare Workers.

@jamesopstad

Copy link
Copy Markdown
Author

@jonathanong I see you are a member of the org and a contributor to Koa. Are you able to review and release this?

Comment threadpackage.json Outdated
UlisesGascon
UlisesGascon previously approved these changes Dec 9, 2025

@UlisesGasconUlisesGascon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

@jamesopstad

Copy link
Copy Markdown
Author

Thanks @jamesopstad for helping the project! I just made a small change in 1473565 for compatibility with Node@0.8 👍

Thanks @UlisesGascon. Is there any chance we could bump up the priority for getting a release out? This is blocking compatibility with some of Cloudflare's developer tools, which is impacting users.

@UlisesGascon

Copy link
Copy Markdown
Member

I think that we can try to target a release for Monday 15th... otherwise next train will be on January. I will book some time to prepare the release 👍

@UlisesGascon

Copy link
Copy Markdown
Member

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

From assert(false, 500, undefined, {foo:1}) -> createError(500, undefined, {foo:1}) to createError(500) 🤔

WDYT @jonchurch@wesleytodd ?

Also... if we consider this as a major, do we want to introduce any additional change? Should we update Node compatibility too?

For additional context see http-errors changelog

@jamesopstad

jamesopstad commented Dec 9, 2025

Copy link
Copy Markdown
Author

IMO this changes behavior in a breaking way... specifically when msg is undefined but opts is provided, those props no longer make it into the created error. That was previously supported, so users relying on that would see a regression.

Could we update this PR to make the change non-breaking by adding logic for this scenario? That would be preferable because otherwise importing libraries will need to upgrade and may consider that they themselves can't support this before a major release.

@jamesopstad

Copy link
Copy Markdown
Author

@UlisesGascon I've pushed some changes that correct the behaviour change and simplify things and I've added a test for this. I believe this means that there's no need for a new major version. Please take a look when you can.

Comment threadtest/test.js
ok(!err.expose)
})

it('should accept options for the error object when msg is undefined', function () {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we have the tests matching the new setup? this is not testing the two new operation / conditions

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What isn't covered by the tests?

Comment threadindex.js
var args = [status]
if (msg !== undefined) args.push(msg)
if (opts !== undefined) args.push(opts)
throw createError.apply(null, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a breaking change here ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a breaking change? How does it change the behaviour for users of http-assert?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update the dependency http-errors to v2

3 participants

@jamesopstad@UlisesGascon@sheplu