{"version":3,"file":"match-path.mjs","names":[],"sources":["../src/match-path.ts"],"sourcesContent":["/**\n * Browser-safe DTCG-flavoured path matcher. Exported through the\n * `@unpunnyfuns/swatchbook-core/match-path` subpath so both the\n * blocks-side `<TypographyScale>` / `<DimensionScale>` / etc. filters\n * and the MCP `list_tokens` / `search_tokens` tools share one\n * implementation — the matcher consumers reach for stays in lockstep.\n *\n * Accepts:\n *   - exact paths (`color.accent.bg`)\n *   - single-segment wildcard (`color.*`, `color.*.bg`)\n *   - multi-segment trailing globstar (`color.**`)\n *   - multi-segment interior globstar (`color.**.500`)\n *\n * No brace expansion, no regex, no character classes — DTCG paths are\n * dot-delimited and this matches what consumers actually want. Case-\n * sensitive.\n */\nexport function matchPath(path: string, filter: string | undefined): boolean {\n  if (!filter) return true;\n  if (filter === '**' || filter === '*') return true;\n\n  const pathSegments = path.split('.');\n  const filterSegments = filter.split('.');\n\n  let pi = 0;\n  let fi = 0;\n  while (fi < filterSegments.length) {\n    const fseg = filterSegments[fi];\n    if (fseg === '**') {\n      // Match zero or more path segments. The next filter segment must match\n      // somewhere in the remaining path, or we accept the tail.\n      if (fi === filterSegments.length - 1) return true;\n      const remaining = filterSegments.slice(fi + 1);\n      for (let k = pi; k <= pathSegments.length; k++) {\n        if (matchPath(pathSegments.slice(k).join('.'), remaining.join('.'))) {\n          return true;\n        }\n      }\n      return false;\n    }\n    if (pi >= pathSegments.length) return false;\n    const pseg = pathSegments[pi];\n    if (fseg === '*') {\n      // pass\n    } else if (fseg !== pseg) {\n      return false;\n    }\n    pi++;\n    fi++;\n  }\n  return pi === pathSegments.length;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,SAAgB,UAAU,MAAc,QAAqC;AAC3E,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,WAAW,QAAQ,WAAW,IAAK,QAAO;CAE9C,MAAM,eAAe,KAAK,MAAM,IAAI;CACpC,MAAM,iBAAiB,OAAO,MAAM,IAAI;CAExC,IAAI,KAAK;CACT,IAAI,KAAK;AACT,QAAO,KAAK,eAAe,QAAQ;EACjC,MAAM,OAAO,eAAe;AAC5B,MAAI,SAAS,MAAM;AAGjB,OAAI,OAAO,eAAe,SAAS,EAAG,QAAO;GAC7C,MAAM,YAAY,eAAe,MAAM,KAAK,EAAE;AAC9C,QAAK,IAAI,IAAI,IAAI,KAAK,aAAa,QAAQ,IACzC,KAAI,UAAU,aAAa,MAAM,EAAE,CAAC,KAAK,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,CACjE,QAAO;AAGX,UAAO;;AAET,MAAI,MAAM,aAAa,OAAQ,QAAO;EACtC,MAAM,OAAO,aAAa;AAC1B,MAAI,SAAS,KAAK,YAEP,SAAS,KAClB,QAAO;AAET;AACA;;AAEF,QAAO,OAAO,aAAa"}