Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
44 lines
922 B
Plaintext
44 lines
922 B
Plaintext
import { invariant } from "./utils.js";
|
|
/**
|
|
* https://tc39.es/ecma402/#sec-unicodeextensionvalue
|
|
* @param extension
|
|
* @param key
|
|
*/
|
|
export function UnicodeExtensionValue(extension, key) {
|
|
invariant(key.length === 2, "key must have 2 elements");
|
|
const size = extension.length;
|
|
let searchValue = `-${key}-`;
|
|
let pos = extension.indexOf(searchValue);
|
|
if (pos !== -1) {
|
|
const start = pos + 4;
|
|
let end = start;
|
|
let k = start;
|
|
let done = false;
|
|
while (!done) {
|
|
const e = extension.indexOf("-", k);
|
|
let len;
|
|
if (e === -1) {
|
|
len = size - k;
|
|
} else {
|
|
len = e - k;
|
|
}
|
|
if (len === 2) {
|
|
done = true;
|
|
} else if (e === -1) {
|
|
end = size;
|
|
done = true;
|
|
} else {
|
|
end = e;
|
|
k = e + 1;
|
|
}
|
|
}
|
|
return extension.slice(start, end);
|
|
}
|
|
searchValue = `-${key}`;
|
|
pos = extension.indexOf(searchValue);
|
|
if (pos !== -1 && pos + 3 === size) {
|
|
return "";
|
|
}
|
|
return undefined;
|
|
}
|