+16
-10
@@ -1,2 +0,2 @@ | ||
| import type { Scanner } from "@ark/util"; | ||
| import type { parseNonNegativeInteger, Scanner } from "@ark/util"; | ||
| import type { s, State } from "./state.ts"; | ||
@@ -14,16 +14,20 @@ export type parseBuiltinQuantifier<s extends State, quantifier extends QuantifyingChar, unscanned extends string> = s["root"] extends "" ? s.error<writeUnmatchedQuantifierError<quantifier>> : quantifyBuiltin<s, quantifier, unscanned extends Scanner.shift<"?", infer lazyUnscanned> ? lazyUnscanned : unscanned>; | ||
| type skipPossibleQuestionMark<unscanned extends string> = unscanned extends `?${infer next}` ? next : unscanned; | ||
| type parsePossibleRangeString<unscanned extends string> = unscanned extends (`${infer l extends number},${infer r extends number}}${infer next}`) ? ParsedRange.from<{ | ||
| min: l; | ||
| max: r; | ||
| type parsePossibleRangeString<unscanned extends string> = unscanned extends (`${infer l extends `${number}`},${infer r extends `${number}`}}${infer next}`) ? ParsedRange.from<{ | ||
| min: parseNonNegativeInteger<l>; | ||
| max: parseNonNegativeInteger<r>; | ||
| unscanned: skipPossibleQuestionMark<next>; | ||
| }> : unscanned extends `${infer l extends number},}${infer next}` ? ParsedRange.from<{ | ||
| min: l; | ||
| }> : unscanned extends `${infer l extends `${number}`},}${infer next}` ? ParsedRange.from<{ | ||
| min: parseNonNegativeInteger<l>; | ||
| max: null; | ||
| unscanned: skipPossibleQuestionMark<next>; | ||
| }> : unscanned extends `${infer l extends number}}${infer next}` ? ParsedRange.from<{ | ||
| min: l; | ||
| max: l; | ||
| }> : unscanned extends `${infer l extends `${number}`}}${infer next}` ? ParsedRange.from<{ | ||
| min: parseNonNegativeInteger<l>; | ||
| max: parseNonNegativeInteger<l>; | ||
| unscanned: skipPossibleQuestionMark<next>; | ||
| }> : null; | ||
| export type parsePossibleRange<s extends State, unscanned extends string, parsed extends ParsedRange | null = parsePossibleRangeString<unscanned>> = parsed extends ParsedRange ? s["root"] extends "" ? s.error<writeUnmatchedQuantifierError<unscanned extends `${infer range}${parsed["unscanned"]}` ? `{${range}` : never>> : s.pushQuantifier<s, parsed["min"], parsed["max"], parsed["unscanned"] extends Scanner.shift<"?", infer lazyUnscanned> ? lazyUnscanned : parsed["unscanned"]> : s.shiftQuantifiable<s, "{", unscanned>; | ||
| type parseQuantifier<unscanned extends string, parsed extends ParsedRange> = unscanned extends `${infer range}${parsed["unscanned"]}` ? `{${range}` : never; | ||
| export type parsePossibleRange<s extends State, unscanned extends string, parsed extends ParsedRange | null = parsePossibleRangeString<unscanned>> = parsed extends ParsedRange ? s["root"] extends "" ? s.error<writeUnmatchedQuantifierError<parseQuantifier<unscanned, parsed>>> : [parsed["min"], parsed["max"]] extends ([ | ||
| never, | ||
| unknown | ||
| ] | [unknown, never]) ? s.error<writeUnnaturalNumberQuantifierError<parseQuantifier<unscanned, parsed>>> : s.pushQuantifier<s, parsed["min"], parsed["max"], parsed["unscanned"] extends Scanner.shift<"?", infer lazyUnscanned> ? lazyUnscanned : parsed["unscanned"]> : s.shiftQuantifiable<s, "{", unscanned>; | ||
| export type quantify<pattern extends string, min extends number, max extends number | null> = tryFastPath<pattern, min, max>; | ||
@@ -38,2 +42,4 @@ type tryFastPath<pattern extends string, min extends number, max extends number | null> = max extends 0 ? "" : string extends pattern ? string : `${bigint}` extends pattern ? `${bigint}` : min extends 0 ? max extends 1 ? "" | pattern : max extends number ? loopFromZero<pattern, max, "", []> : // max is null, all we can do is append ${string} | ||
| export type writeUnmatchedQuantifierError<quantifier extends string> = `Quantifier ${quantifier} requires a preceding token`; | ||
| export declare const writeUnnaturalNumberQuantifierError: <quantifier extends string>(quantifier: quantifier) => writeUnnaturalNumberQuantifierError<quantifier>; | ||
| export type writeUnnaturalNumberQuantifierError<quantifier extends string> = `Quantifier ${quantifier} must use natural numbers`; | ||
| export {}; |
+1
-0
| export const writeUnmatchedQuantifierError = (quantifier) => `Quantifier ${quantifier} requires a preceding token`; | ||
| export const writeUnnaturalNumberQuantifierError = (quantifier) => `Quantifier ${quantifier} must use natural numbers`; |
+2
-2
| { | ||
| "name": "arkregex", | ||
| "description": "A drop-in replacement for new RegExp() with types", | ||
| "version": "0.0.2", | ||
| "version": "0.0.3", | ||
| "license": "MIT", | ||
@@ -32,3 +32,3 @@ "author": { | ||
| "dependencies": { | ||
| "@ark/util": "0.53.0" | ||
| "@ark/util": "0.55.0" | ||
| }, | ||
@@ -35,0 +35,0 @@ "publishConfig": { |
+2
-0
@@ -24,2 +24,4 @@ # arkregex | ||
| Performs best with TS 5.9+ | ||
| ### Features | ||
@@ -26,0 +28,0 @@ |
48362
1.89%611
1.33%62
3.33%+ Added
- Removed
Updated