nth-check Build Status

Parses and compiles CSS nth-checks to highly optimized functions.

About

This module can be used to parse & compile nth-checks, as they are found in CSS 3's nth-child() and nth-last-of-type(). It can be used to check if a given index matches a given nth-rule, or to generate a sequence of indices matching a given nth-rule.

nth-check focusses on speed, providing optimized functions for different kinds of nth-child formulas, while still following the spec.

API

import nthCheck, { parse, compile } from "nth-check";
nthCheck(formula)

Parses and compiles a formula to a highly optimized function. Combination of parse and compile.

If the formula doesn't match any elements, it returns boolbase's falseFunc. Otherwise, a function accepting an index is returned, which returns whether or not the passed index matches the formula.

Note: The nth-rule starts counting at 1, the returned function at 0.

Example:

const check = nthCheck("2n+3");

check(0); // `false`
check(1); // `false`
check(2); // `true`
check(3); // `false`
check(4); // `true`
check(5); // `false`
check(6); // `true`
parse(formula)

Parses the expression, throws an Error if it fails. Otherwise, returns an array containing the integer step size and the integer offset of the nth rule.

Example:

parse("2n+3"); // [2, 3]
compile([a, b])

Takes an array with two elements (as returned by .parse) and returns a highly optimized function.

Example:

const check = compile([2, 3]);

check(0); // `false`
check(1); // `false`
check(2); // `true`
check(3); // `false`
check(4); // `true`
check(5); // `false`
check(6); // `true`
generate([a, b])

Returns a function that produces a monotonously increasing sequence of indices.

If the sequence has an end, the returned function will return null after the last index in the sequence.

Example: An always increasing sequence

const gen = nthCheck.generate([2, 3]);

gen(); // `1`
gen(); // `3`
gen(); // `5`
gen(); // `8`
gen(); // `11`

Example: With an end value

const gen = nthCheck.generate([-2, 5]);

gen(); // 0
gen(); // 2
gen(); // 4
gen(); // null
sequence(formula)

Parses and compiles a formula to a generator that produces a sequence of indices. Combination of parse and generate.

Example: An always increasing sequence

const gen = nthCheck.sequence("2n+3");

gen(); // `1`
gen(); // `3`
gen(); // `5`
gen(); // `8`
gen(); // `11`

Example: With an end value

const gen = nthCheck.sequence("-2n+5");

gen(); // 0
gen(); // 2
gen(); // 4
gen(); // null

License: BSD-2-Clause

Security contact information

To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.

nth-check - Installation

To install nth-check via this registry, you'll need to install via the --registry parameter with your package manager.

n

NPM

npm install nth-check --registry https://js.registry.sudovanilla.org

Learn more about the --registry parameter.

Yarn

yarn config set registry https://js.registry.sudovanilla.org
yarn install nth-check

Learn more about the config option.

PNPM

pnpm install nth-check --registry https://js.registry.sudovanilla.org

Learn more about the --registry parameter.

Bun Logo

Bun

bun install nth-check --registry https://js.registry.sudovanilla.org

Learn more about the --registry parameter.

Learn more about setting this up in your bunfig.toml configuration.


For Deno, add the following to your .npmrc file in your directory:

registry="https://js.registry.sudovanilla.org"

Then run the deno install command.

nth-check - Download

Download Tarball (v3.0.1)

Integrity sha512-GX0gsdbGVCgnRgbeGaubfjpBXyYRWOOCVeYh08bSQvDZqxz5ndXs1OTfAt/h36G1xvI94YIspsI0sVFqAV9+RQ==
SHASUM a5ede96060f7f0b74d7d3d8425f2a8f0610c5776
Tarball https://js.registry.sudovanilla.org/nth-check/-/nth-check-3.0.1.tgz