/* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ // @ts-nocheck import type { MatchFn, MatchValueCallback } from '../../types.ts'; export interface BuildMatchPatternFnArgs { matchPattern: RegExp; parsePattern: RegExp; valueCallback?: MatchValueCallback; } export function buildMatchPatternFn(args: BuildMatchPatternFnArgs): MatchFn { return (string, options = {}) => { const matchResult = string.match(args.matchPattern); if (!matchResult) return null; const matchedString = matchResult[0]; const parseResult = string.match(args.parsePattern); if (!parseResult) return null; let value = (args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]) as Result; // [TODO] I challenge you to fix the type value = options.valueCallback ? options.valueCallback(value as any) : value; const rest = string.slice(matchedString.length); return { value, rest }; }; } /* eslint-enable */