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
 |