63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { parse } from "./parse.js";
 | 
						|
import { compile, generate } from "./compile.js";
 | 
						|
export { parse, compile, generate };
 | 
						|
/**
 | 
						|
 * Parses and compiles a formula to a highly optimized function.
 | 
						|
 * Combination of {@link parse} and {@link compile}.
 | 
						|
 *
 | 
						|
 * If the formula doesn't match any elements,
 | 
						|
 * it returns [`boolbase`](https://github.com/fb55/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`.
 | 
						|
 *
 | 
						|
 * @param formula The formula to compile.
 | 
						|
 * @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`
 | 
						|
 */
 | 
						|
export default function nthCheck(formula) {
 | 
						|
    return compile(parse(formula));
 | 
						|
}
 | 
						|
/**
 | 
						|
 * Parses and compiles a formula to a generator that produces a sequence of indices.
 | 
						|
 * Combination of {@link parse} and {@link generate}.
 | 
						|
 *
 | 
						|
 * @param formula The formula to compile.
 | 
						|
 * @returns A function that produces a sequence of indices.
 | 
						|
 * @example <caption>Always increasing</caption>
 | 
						|
 *
 | 
						|
 * ```js
 | 
						|
 * const gen = nthCheck.sequence('2n+3')
 | 
						|
 *
 | 
						|
 * gen() // `1`
 | 
						|
 * gen() // `3`
 | 
						|
 * gen() // `5`
 | 
						|
 * gen() // `8`
 | 
						|
 * gen() // `11`
 | 
						|
 * ```
 | 
						|
 *
 | 
						|
 * @example <caption>With end value</caption>
 | 
						|
 *
 | 
						|
 * ```js
 | 
						|
 *
 | 
						|
 * const gen = nthCheck.sequence('-2n+5');
 | 
						|
 *
 | 
						|
 * gen() // 0
 | 
						|
 * gen() // 2
 | 
						|
 * gen() // 4
 | 
						|
 * gen() // null
 | 
						|
 * ```
 | 
						|
 */
 | 
						|
export function sequence(formula) {
 | 
						|
    return generate(parse(formula));
 | 
						|
}
 | 
						|
//# sourceMappingURL=index.js.map
 |