Files
klz-cables.com/.pnpm-store/v10/files/5a/d73f198024126acdd2f67c73d6b360ba5b431ba1407adeec179ba36b6de07992ba97ec2ef8aa15369faae70e3bb340c7d62a098deef81a6252b2bdc658438c
Marc Mintel 5397309103
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
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

45 lines
1.2 KiB
Plaintext

import { invariant } from "./utils.js";
export function UnicodeExtensionComponents(extension) {
invariant(extension === extension.toLowerCase(), "Expected extension to be lowercase");
invariant(extension.slice(0, 3) === "-u-", "Expected extension to be a Unicode locale extension");
const attributes = [];
const keywords = [];
let keyword;
let size = extension.length;
let k = 3;
while (k < size) {
let e = extension.indexOf("-", k);
let len;
if (e === -1) {
len = size - k;
} else {
len = e - k;
}
let subtag = extension.slice(k, k + len);
invariant(len >= 2, "Expected a subtag to have at least 2 characters");
if (keyword === undefined && len != 2) {
if (attributes.indexOf(subtag) === -1) {
attributes.push(subtag);
}
} else if (len === 2) {
keyword = {
key: subtag,
value: ""
};
if (keywords.find((k) => k.key === keyword?.key) === undefined) {
keywords.push(keyword);
}
} else if (keyword?.value === "") {
keyword.value = subtag;
} else {
invariant(keyword !== undefined, "Expected keyword to be defined");
keyword.value += "-" + subtag;
}
k += len + 1;
}
return {
attributes,
keywords
};
}