Skip to content

Commit

Permalink
feat: add polyfill of URL.canParse for browser compatibility (#70228)
Browse files Browse the repository at this point in the history
### Why?

Since `URL.canParse` is incompatible with older browsers like Safari 16,
we added `canParseUrl` util at
#70215.
x-ref: https://caniuse.com/?search=URL.canParse

To improve maintenance, we decided to add polyfill for `URL.canParse`.
x-ref: [slack
thread](https://vercel.slack.com/archives/C07BVA6HM17/p1726664071636899?thread_ts=1726620161.450109&cid=C07BVA6HM17)

Closes NDX-302

---------

Co-authored-by: Jiachi Liu <inbox@huozhi.im>
# Conflicts:
#	packages/next/src/lib/url.ts
#	packages/next/src/server/lib/router-server.ts
#	pnpm-lock.yaml
  • Loading branch information
devjiwonchoi authored and ijjk committed Sep 19, 2024
1 parent b503b8e commit 62fbd7f
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 3 deletions.
20 changes: 20 additions & 0 deletions packages/next-polyfill-module/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,23 @@ if (!Object.hasOwn) {
return Object.prototype.hasOwnProperty.call(Object(object), property)
}
}

/**
* Available in:
* Edge: 120
* Firefox: 115
* Chrome: 120
* Safari: 17.0
*
* https://caniuse.com/mdn-api_url_canparse_static
*/
// Modified from https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.url.can-parse.js
if (!('canParse' in URL)) {
URL.canParse = function (url, base) {
try {
return !!new URL(url, base)
} catch {
return false
}
}
}
2 changes: 1 addition & 1 deletion packages/next-polyfill-nomodule/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"prepublishOnly": "cd ../../ && turbo run build"
},
"devDependencies": {
"core-js": "3.6.5",
"core-js": "3.38.1",
"microbundle": "0.15.0",
"object-assign": "4.1.1",
"whatwg-fetch": "3.0.0"
Expand Down
1 change: 1 addition & 0 deletions packages/next-polyfill-nomodule/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import 'core-js/features/string/trim-left'
import 'core-js/features/string/trim-right'
import 'core-js/features/url'
import 'core-js/features/url/to-json'
import 'core-js/features/url/can-parse'
import 'core-js/features/url-search-params'
import 'core-js/features/weak-map'
import 'core-js/features/weak-set'
Expand Down
9 changes: 7 additions & 2 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 62fbd7f

Please sign in to comment.