{"version":3,"sources":["../../src/tokenize/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport {\n  curry,\n  map,\n  pipe,\n  split,\n  match,\n  reduce,\n  flatten,\n  reject,\n  __,\n} from \"ramda\";\n\nimport { config } from \"../config\";\n\nimport { rules } from \"./rules\";\nimport { buildToken, isToken } from \"./token\";\nimport { zipConcat, compact, wrap } from \"./utils\";\nimport { isUnknown } from \"../queries\";\nimport type { Token } from \"../types\";\n\ntype AnyFunction = (...args: any[]) => any;\n\ntype Rule = {\n  data: any;\n  key: RegExp;\n};\n\nconst applyRuleOnTarget = curry(\n  ({ data, key }: Rule, target: string | Token) => {\n    if (isToken(target as Token)) {\n      return target;\n    }\n\n    return zipConcat(\n      split(key, target as string),\n      map(\n        buildToken(data as Token) as AnyFunction,\n        match(key, target as string),\n      ),\n    );\n  },\n);\n\nconst applyRuleOnTargets = (targets: (string | Token)[], rule: Rule) =>\n  pipe(map(applyRuleOnTarget(rule)), flatten, compact)(targets);\n\nexport const tokenize: (expr: string) => Token[] = pipe(\n  wrap as AnyFunction,\n  reduce(applyRuleOnTargets as AnyFunction, __, rules(config)),\n  reject(isUnknown),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAiBP,IAAM,oBAAoB;AAAA,EACxB,CAAC,EAAE,MAAM,IAAI,GAAS,WAA2B;AAC/C,QAAI,QAAQ,MAAe,GAAG;AAC5B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,MAAM,KAAK,MAAgB;AAAA,MAC3B;AAAA,QACE,WAAW,IAAa;AAAA,QACxB,MAAM,KAAK,MAAgB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,qBAAqB,CAAC,SAA6B,SACvD,KAAK,IAAI,kBAAkB,IAAI,CAAC,GAAG,SAAS,OAAO,EAAE,OAAO;AAEvD,IAAM,WAAsC;AAAA,EACjD;AAAA,EACA,OAAO,oBAAmC,IAAI,MAAM,MAAM,CAAC;AAAA,EAC3D,OAAO,SAAS;AAClB;","names":[]}