{"version":3,"file":"useMatch.cjs","names":["Solid","invariant","replaceEqualDeep","nearestMatchContext","useRouter","AnyRouter","MakeRouteMatch","MakeRouteMatchUnion","RegisteredRouter","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseMatchBaseOptions","select","match","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseMatchRoute","opts","Accessor","UseMatchResult","UseMatchOptions","useMatch","router","nearestMatch","from","undefined","useContext","ids","stores","matchesId","state","id","matchStore","activeMatchStoresById","get","routeId","createMemo","prev","selectedMatch","hasPendingMatch","Boolean","pendingRouteIds","hasPending","isTransitioning","process","env","NODE_ENV","Error","res"],"sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { invariant, replaceEqualDeep } from '@tanstack/router-core'\nimport { nearestMatchContext } from './matchContext'\nimport { useRouter } from './useRouter'\nimport type {\n  AnyRouter,\n  MakeRouteMatch,\n  MakeRouteMatchUnion,\n  RegisteredRouter,\n  StrictOrFrom,\n  ThrowConstraint,\n  ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n  TRouter extends AnyRouter,\n  TFrom,\n  TStrict extends boolean,\n  TThrow extends boolean,\n  TSelected,\n> {\n  select?: (\n    match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n  ) => TSelected\n  shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n  TRouter extends AnyRouter = RegisteredRouter,\n  TSelected = unknown,\n>(\n  opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n  TRouter extends AnyRouter,\n  TFrom extends string | undefined,\n  TStrict extends boolean,\n  TThrow extends boolean,\n  TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n  UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n  TRouter extends AnyRouter,\n  TFrom,\n  TStrict extends boolean,\n  TSelected,\n> = unknown extends TSelected\n  ? TStrict extends true\n    ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n    : MakeRouteMatchUnion<TRouter>\n  : TSelected\n\nexport function useMatch<\n  TRouter extends AnyRouter = RegisteredRouter,\n  const TFrom extends string | undefined = undefined,\n  TStrict extends boolean = true,\n  TThrow extends boolean = true,\n  TSelected = unknown,\n>(\n  opts: UseMatchOptions<\n    TRouter,\n    TFrom,\n    TStrict,\n    ThrowConstraint<TStrict, TThrow>,\n    TSelected\n  >,\n): Solid.Accessor<\n  ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n  const router = useRouter<TRouter>()\n  const nearestMatch = opts.from\n    ? undefined\n    : Solid.useContext(nearestMatchContext)\n\n  const match = () => {\n    if (opts.from) {\n      const ids = router.stores.matchesId.state\n      for (const id of ids) {\n        const matchStore = router.stores.activeMatchStoresById.get(id)\n        if (matchStore?.routeId === opts.from) {\n          return matchStore.state\n        }\n      }\n\n      return undefined\n    }\n\n    return nearestMatch?.match()\n  }\n\n  return Solid.createMemo((prev: TSelected | undefined) => {\n    const selectedMatch = match()\n\n    if (selectedMatch === undefined) {\n      const hasPendingMatch = opts.from\n        ? Boolean(router.stores.pendingRouteIds.state[opts.from!])\n        : (nearestMatch?.hasPending() ?? false)\n      const isTransitioning = router.stores.isTransitioning.state\n\n      if (!hasPendingMatch && !isTransitioning && (opts.shouldThrow ?? true)) {\n        if (process.env.NODE_ENV !== 'production') {\n          throw new Error(\n            `Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n          )\n        }\n        invariant()\n      }\n      return undefined\n    }\n\n    const res = opts.select ? opts.select(selectedMatch as any) : selectedMatch\n    if (prev === undefined) return res as TSelected\n    return replaceEqualDeep(prev, res) as TSelected\n  }) as any\n}\n"],"mappings":";;;;;;;AAsDA,SAAgB0B,SAOdJ,MASA;CACA,MAAMK,SAASvB,kBAAAA,WAAoB;CACnC,MAAMwB,eAAeN,KAAKO,OACtBC,KAAAA,IACA9B,SAAM+B,WAAW5B,qBAAAA,oBAAoB;CAEzC,MAAMW,cAAc;AAClB,MAAIQ,KAAKO,MAAM;GACb,MAAMG,MAAML,OAAOM,OAAOC,UAAUC;AACpC,QAAK,MAAMC,MAAMJ,KAAK;IACpB,MAAMK,aAAaV,OAAOM,OAAOK,sBAAsBC,IAAIH,GAAG;AAC9D,QAAIC,YAAYG,YAAYlB,KAAKO,KAC/B,QAAOQ,WAAWF;;AAItB;;AAGF,SAAOP,cAAcd,OAAO;;AAG9B,QAAOd,SAAMyC,YAAYC,SAAgC;EACvD,MAAMC,gBAAgB7B,OAAO;AAE7B,MAAI6B,kBAAkBb,KAAAA,GAAW;GAC/B,MAAMc,kBAAkBtB,KAAKO,OACzBgB,QAAQlB,OAAOM,OAAOa,gBAAgBX,MAAMb,KAAKO,MAAO,GACvDD,cAAcmB,YAAY,IAAI;GACnC,MAAMC,kBAAkBrB,OAAOM,OAAOe,gBAAgBb;AAEtD,OAAI,CAACS,mBAAmB,CAACI,oBAAoB1B,KAAKH,eAAe,OAAO;AACtE,QAAA,QAAA,IAAA,aAA6B,aAC3B,OAAM,IAAIiC,MACR,oCAAoC9B,KAAKO,OAAO,yBAAyBP,KAAKO,KAAI,KAAM,qBACzF;AAEH5B,KAAAA,GAAAA,sBAAAA,YAAW;;AAEb;;EAGF,MAAMoD,MAAM/B,KAAKT,SAASS,KAAKT,OAAO8B,cAAqB,GAAGA;AAC9D,MAAID,SAASZ,KAAAA,EAAW,QAAOuB;AAC/B,UAAA,GAAA,sBAAA,kBAAwBX,MAAMW,IAAI;GAClC"}