mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-30 01:07:01 +08:00
Stylelint v16 deprecated CJS so I moved our lint script to ESM, and fixed all the deprecation warning. The only place I needed to silence them were tests, as we import CJS there. Bug: none Change-Id: Iae4d2df76c855a9738b774a2d035f22509770215 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6138610 Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
37 lines
916 B
JavaScript
37 lines
916 B
JavaScript
/**
|
|
* Get unit from value node
|
|
*
|
|
* Returns `null` if the unit is not found.
|
|
*
|
|
* @param {string} urlString
|
|
* @returns {string | null}
|
|
*/
|
|
export default function getSchemeFromUrl(urlString) {
|
|
let protocol = null;
|
|
|
|
try {
|
|
protocol = new URL(urlString).protocol;
|
|
} catch {
|
|
return null;
|
|
}
|
|
|
|
if (protocol === null || typeof protocol === 'undefined') {
|
|
return null;
|
|
}
|
|
|
|
const scheme = protocol.slice(0, -1); // strip trailing `:`
|
|
|
|
// The URL spec does not require a scheme to be followed by `//`, but checking
|
|
// for it allows this rule to differentiate <scheme>:<hostname> urls from
|
|
// <hostname>:<port> urls. `data:` scheme urls are an exception to this rule.
|
|
const slashIndex = protocol.length;
|
|
const expectedSlashes = urlString.slice(slashIndex, slashIndex + 2);
|
|
const isSchemeLessUrl = expectedSlashes !== '//' && scheme !== 'data';
|
|
|
|
if (isSchemeLessUrl) {
|
|
return null;
|
|
}
|
|
|
|
return scheme;
|
|
}
|