You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.2 KiB
47 lines
1.2 KiB
export const filterNames = new Set([ |
|
"first", |
|
"last", |
|
"eq", |
|
"gt", |
|
"nth", |
|
"lt", |
|
"even", |
|
"odd", |
|
]); |
|
export function isFilter(s) { |
|
if (s.type !== "pseudo") |
|
return false; |
|
if (filterNames.has(s.name)) |
|
return true; |
|
if (s.name === "not" && Array.isArray(s.data)) { |
|
// Only consider `:not` with embedded filters |
|
return s.data.some((s) => s.some(isFilter)); |
|
} |
|
return false; |
|
} |
|
export function getLimit(filter, data, partLimit) { |
|
const num = data != null ? parseInt(data, 10) : NaN; |
|
switch (filter) { |
|
case "first": |
|
return 1; |
|
case "nth": |
|
case "eq": |
|
return isFinite(num) ? (num >= 0 ? num + 1 : Infinity) : 0; |
|
case "lt": |
|
return isFinite(num) |
|
? num >= 0 |
|
? Math.min(num, partLimit) |
|
: Infinity |
|
: 0; |
|
case "gt": |
|
return isFinite(num) ? Infinity : 0; |
|
case "odd": |
|
return 2 * partLimit; |
|
case "even": |
|
return 2 * partLimit - 1; |
|
case "last": |
|
case "not": |
|
return Infinity; |
|
} |
|
} |
|
//# sourceMappingURL=positionals.js.map
|