@kitbag/router 0.24.3 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/dist/compositions/useRouteValueStore.d.ts +7 -0
  2. package/dist/errors/loaderDataAccessError.d.ts +8 -0
  3. package/dist/errors/loaderNameConflict.d.ts +9 -0
  4. package/dist/errors/navigationAbandonedError.d.ts +6 -0
  5. package/dist/kitbag-router.d.ts +1 -1
  6. package/dist/kitbag-router.js +6452 -6172
  7. package/dist/kitbag-router.umd.cjs +5 -4
  8. package/dist/{src/main.d.ts → main.d.ts} +8 -0
  9. package/dist/services/addLoader.d.ts +40 -0
  10. package/dist/services/addView.d.ts +37 -0
  11. package/dist/{src/services → services}/component.d.ts +2 -3
  12. package/dist/{src/services → services}/createComponentsStore.d.ts +2 -2
  13. package/dist/services/createCurrentRoute.d.ts +25 -0
  14. package/dist/services/createDataStore.d.ts +48 -0
  15. package/dist/services/createNavigationStores.d.ts +31 -0
  16. package/dist/{src/services → services}/createRoute.d.ts +3 -6
  17. package/dist/services/createRouteValueStore.d.ts +56 -0
  18. package/dist/services/createRouteViews.d.ts +16 -0
  19. package/dist/{src/services → services}/createRouterRoute.d.ts +2 -2
  20. package/dist/{src/services → services}/getRoutesForRouter.d.ts +0 -1
  21. package/dist/services/withRouteMethods.d.ts +7 -0
  22. package/dist/types/addLoader.d.ts +69 -0
  23. package/dist/types/addView.d.ts +104 -0
  24. package/dist/{src/types → types}/createRouteOptions.d.ts +45 -24
  25. package/dist/{src/types → types}/hooks.d.ts +2 -2
  26. package/dist/{src/types → types}/prefetch.d.ts +1 -0
  27. package/dist/{src/types → types}/props.d.ts +12 -4
  28. package/dist/{src/types → types}/resolved.d.ts +21 -2
  29. package/dist/types/route.d.ts +121 -0
  30. package/dist/types/routeCallbackContext.d.ts +30 -0
  31. package/dist/types/routeLoaders.d.ts +30 -0
  32. package/dist/types/routeViews.d.ts +44 -0
  33. package/dist/types/routeWithMethods.d.ts +16 -0
  34. package/dist/{src/types → types}/routerPlugin.d.ts +1 -1
  35. package/dist/{src/types → types}/routerRoute.d.ts +6 -0
  36. package/dist/{src/types → types}/utilities.d.ts +1 -0
  37. package/dist/utilities/checkDuplicateNames.spec.d.ts +1 -0
  38. package/dist/utilities/checkDuplicateParams.spec.d.ts +1 -0
  39. package/dist/utilities/components.spec.d.ts +1 -0
  40. package/dist/utilities/guards.spec.d.ts +1 -0
  41. package/dist/utilities/isBrowser.browser.spec.d.ts +1 -0
  42. package/dist/utilities/isBrowser.spec.d.ts +1 -0
  43. package/dist/{src/utilities → utilities}/prefetch.d.ts +1 -1
  44. package/dist/utilities/prefetch.spec.d.ts +1 -0
  45. package/dist/utilities/props.d.ts +16 -0
  46. package/dist/utilities/testHelpers.d.ts +242 -0
  47. package/dist/utilities/trailingSlashes.spec.d.ts +1 -0
  48. package/dist/utilities/urlSearchParams.spec.d.ts +1 -0
  49. package/package.json +15 -15
  50. package/dist/src/compositions/usePropStore.d.ts +0 -7
  51. package/dist/src/services/createCurrentRoute.d.ts +0 -13
  52. package/dist/src/services/createPropStore.d.ts +0 -13
  53. package/dist/src/types/route.d.ts +0 -80
  54. package/dist/src/utilities/props.d.ts +0 -6
  55. package/dist/src/utilities/testHelpers.d.ts +0 -3699
  56. /package/dist/{src/components → components}/echo.d.ts +0 -0
  57. /package/dist/{src/components → components}/helloWorld.d.ts +0 -0
  58. /package/dist/{src/components → components}/rejection.d.ts +0 -0
  59. /package/dist/{src/components → components}/routerLink.browser.spec.d.ts +0 -0
  60. /package/dist/{src/components → components}/routerLink.d.ts +0 -0
  61. /package/dist/{src/components → components}/routerView.browser.spec.d.ts +0 -0
  62. /package/dist/{src/components → components}/routerView.d.ts +0 -0
  63. /package/dist/{src/components → components}/routerView.spec.d.ts +0 -0
  64. /package/dist/{src/compositions → compositions}/useComponentsStore.d.ts +0 -0
  65. /package/dist/{src/compositions → compositions}/useEventListener.d.ts +0 -0
  66. /package/dist/{src/compositions → compositions}/useLink.d.ts +0 -0
  67. /package/dist/{src/compositions → compositions}/usePrefetching.d.ts +0 -0
  68. /package/dist/{src/compositions → compositions}/useQueryValue.browser.spec.d.ts +0 -0
  69. /package/dist/{src/compositions → compositions}/useQueryValue.d.ts +0 -0
  70. /package/dist/{src/compositions → compositions}/useQueryValue.spec-d.d.ts +0 -0
  71. /package/dist/{src/compositions → compositions}/useRejection.d.ts +0 -0
  72. /package/dist/{src/compositions → compositions}/useRoute.browser.spec.d.ts +0 -0
  73. /package/dist/{src/compositions → compositions}/useRoute.d.ts +0 -0
  74. /package/dist/{src/compositions → compositions}/useRoute.spec-d.d.ts +0 -0
  75. /package/dist/{src/compositions → compositions}/useRouter.d.ts +0 -0
  76. /package/dist/{src/compositions → compositions}/useRouterDepth.d.ts +0 -0
  77. /package/dist/{src/compositions → compositions}/useRouterHooks.d.ts +0 -0
  78. /package/dist/{src/compositions → compositions}/useVisibilityObserver.d.ts +0 -0
  79. /package/dist/{src/devtools → devtools}/createRouterDevtools.d.ts +0 -0
  80. /package/dist/{src/devtools → devtools}/filters.d.ts +0 -0
  81. /package/dist/{src/devtools → devtools}/getDevtoolsLabel.d.ts +0 -0
  82. /package/dist/{src/devtools → devtools}/types.d.ts +0 -0
  83. /package/dist/{src/errors → errors}/contextAbortError.d.ts +0 -0
  84. /package/dist/{src/errors → errors}/contextError.d.ts +0 -0
  85. /package/dist/{src/errors → errors}/contextPushError.d.ts +0 -0
  86. /package/dist/{src/errors → errors}/contextRejectionError.d.ts +0 -0
  87. /package/dist/{src/errors → errors}/duplicateNamesError.d.ts +0 -0
  88. /package/dist/{src/errors → errors}/duplicateParamsError.d.ts +0 -0
  89. /package/dist/{src/errors → errors}/initialRouteMissingError.d.ts +0 -0
  90. /package/dist/{src/errors → errors}/invalidRouteParamValueError.d.ts +0 -0
  91. /package/dist/{src/errors → errors}/invalidRouteRedirectError.d.ts +0 -0
  92. /package/dist/{src/errors → errors}/metaPropertyConflict.d.ts +0 -0
  93. /package/dist/{src/errors → errors}/multipleRouteRedirectsError.d.ts +0 -0
  94. /package/dist/{src/errors → errors}/routeNotFoundError.d.ts +0 -0
  95. /package/dist/{src/errors → errors}/routerNotInstalledError.d.ts +0 -0
  96. /package/dist/{src/errors → errors}/useRouteInvalidError.d.ts +0 -0
  97. /package/dist/{src/guards → guards}/routes.d.ts +0 -0
  98. /package/dist/{src/guards → guards}/routes.spec-d.d.ts +0 -0
  99. /package/dist/{src/keys.d.ts → keys.d.ts} +0 -0
  100. /package/dist/{src/models → models}/hooks.d.ts +0 -0
  101. /package/dist/{src/services/arrayOf.spec.d.ts → services/addLoader.spec-d.d.ts} +0 -0
  102. /package/dist/{src/services/combineHash.spec.d.ts → services/addLoader.spec.d.ts} +0 -0
  103. /package/dist/{src/services/combineMeta.spec.d.ts → services/addView.browser.spec.d.ts} +0 -0
  104. /package/dist/{src/services/combinePath.spec-d.d.ts → services/addView.spec-d.d.ts} +0 -0
  105. /package/dist/{src/services/combinePath.spec.d.ts → services/addView.spec.d.ts} +0 -0
  106. /package/dist/{src/services → services}/arrayOf.d.ts +0 -0
  107. /package/dist/{src/services/combineQuery.spec.d.ts → services/arrayOf.spec.d.ts} +0 -0
  108. /package/dist/{src/services → services}/combineHash.d.ts +0 -0
  109. /package/dist/{src/services/combineState.spec.d.ts → services/combineHash.spec.d.ts} +0 -0
  110. /package/dist/{src/services → services}/combineMeta.d.ts +0 -0
  111. /package/dist/{src/services/combineUrl.spec.d.ts → services/combineMeta.spec.d.ts} +0 -0
  112. /package/dist/{src/services → services}/combinePath.d.ts +0 -0
  113. /package/dist/{src/services/component.browser.spec.d.ts → services/combinePath.spec-d.d.ts} +0 -0
  114. /package/dist/{src/services/createExternalRoute.spec.d.ts → services/combinePath.spec.d.ts} +0 -0
  115. /package/dist/{src/services → services}/combineQuery.d.ts +0 -0
  116. /package/dist/{src/services/createIsExternal.spec.d.ts → services/combineQuery.spec.d.ts} +0 -0
  117. /package/dist/{src/services → services}/combineState.d.ts +0 -0
  118. /package/dist/{src/services/createResolvedRoute.spec.d.ts → services/combineState.spec.d.ts} +0 -0
  119. /package/dist/{src/services → services}/combineUrl.d.ts +0 -0
  120. /package/dist/{src/services/createRoute.spec-d.d.ts → services/combineUrl.spec.d.ts} +0 -0
  121. /package/dist/{src/services/createRoute.spec.d.ts → services/component.browser.spec.d.ts} +0 -0
  122. /package/dist/{src/services → services}/createComponentHooks.d.ts +0 -0
  123. /package/dist/{src/services → services}/createCurrentRejection.d.ts +0 -0
  124. /package/dist/{src/services/createRouteRedirects.spec.d.ts → services/createDataStore.spec.d.ts} +0 -0
  125. /package/dist/{src/services → services}/createExternalRoute.d.ts +0 -0
  126. /package/dist/{src/services/createRouter.browser.spec.d.ts → services/createExternalRoute.spec.d.ts} +0 -0
  127. /package/dist/{src/services → services}/createIsExternal.d.ts +0 -0
  128. /package/dist/{src/services/createRouter.spec-d.d.ts → services/createIsExternal.spec.d.ts} +0 -0
  129. /package/dist/{src/services/createRouter.spec.d.ts → services/createNavigationStores.spec.d.ts} +0 -0
  130. /package/dist/{src/services → services}/createParam.d.ts +0 -0
  131. /package/dist/{src/services → services}/createRejection.d.ts +0 -0
  132. /package/dist/{src/services → services}/createRejectionHooks.d.ts +0 -0
  133. /package/dist/{src/services → services}/createResolvedRoute.d.ts +0 -0
  134. /package/dist/{src/services/createRouterHistory.browser.spec.d.ts → services/createResolvedRoute.spec.d.ts} +0 -0
  135. /package/dist/{src/services → services}/createResolvedRouteQuery.d.ts +0 -0
  136. /package/dist/{src/services/createRouterPlugin.browser.spec.d.ts → services/createRoute.spec-d.d.ts} +0 -0
  137. /package/dist/{src/services/createRouterPlugin.spec-d.d.ts → services/createRoute.spec.d.ts} +0 -0
  138. /package/dist/{src/services → services}/createRouteHooks.d.ts +0 -0
  139. /package/dist/{src/services → services}/createRouteId.d.ts +0 -0
  140. /package/dist/{src/services → services}/createRouteRedirects.d.ts +0 -0
  141. /package/dist/{src/services/createRouterRoute.spec.d.ts → services/createRouteRedirects.spec.d.ts} +0 -0
  142. /package/dist/{src/services/createUrl.spec.d.ts → services/createRouter.browser.spec.d.ts} +0 -0
  143. /package/dist/{src/services → services}/createRouter.d.ts +0 -0
  144. /package/dist/{src/services/getInitialUrl.browser.spec.d.ts → services/createRouter.spec-d.d.ts} +0 -0
  145. /package/dist/{src/services/getInitialUrl.spec.d.ts → services/createRouter.spec.d.ts} +0 -0
  146. /package/dist/{src/services → services}/createRouterAssets.d.ts +0 -0
  147. /package/dist/{src/services → services}/createRouterCallbackContext.d.ts +0 -0
  148. /package/dist/{src/services/getMatchesForUrl.spec.d.ts → services/createRouterHistory.browser.spec.d.ts} +0 -0
  149. /package/dist/{src/services → services}/createRouterHistory.d.ts +0 -0
  150. /package/dist/{src/services → services}/createRouterHooks.d.ts +0 -0
  151. /package/dist/{src/services → services}/createRouterKeyStore.d.ts +0 -0
  152. /package/dist/{src/services/getRouteHooks.spec.d.ts → services/createRouterPlugin.browser.spec.d.ts} +0 -0
  153. /package/dist/{src/services → services}/createRouterPlugin.d.ts +0 -0
  154. /package/dist/{src/services/getRoutesForRouter.spec.d.ts → services/createRouterPlugin.spec-d.d.ts} +0 -0
  155. /package/dist/{src/services/history.browser.spec.d.ts → services/createRouterRoute.spec.d.ts} +0 -0
  156. /package/dist/{src/services → services}/createUniqueIdSequence.d.ts +0 -0
  157. /package/dist/{src/services → services}/createUrl.d.ts +0 -0
  158. /package/dist/{src/services/hooks.browser.spec.d.ts → services/createUrl.spec.d.ts} +0 -0
  159. /package/dist/{src/services → services}/createVisibilityObserver.d.ts +0 -0
  160. /package/dist/{src/services → services}/createVueAppStore.d.ts +0 -0
  161. /package/dist/{src/services → services}/getGlobalHooksForRouter.d.ts +0 -0
  162. /package/dist/{src/services → services}/getGlobalRouteHooks.d.ts +0 -0
  163. /package/dist/{src/services/hooks.spec.d.ts → services/getInitialUrl.browser.spec.d.ts} +0 -0
  164. /package/dist/{src/services → services}/getInitialUrl.d.ts +0 -0
  165. /package/dist/{src/services/insertBaseRoute.spec.d.ts → services/getInitialUrl.spec.d.ts} +0 -0
  166. /package/dist/{src/services → services}/getMatchesForUrl.d.ts +0 -0
  167. /package/dist/{src/services/params.spec.d.ts → services/getMatchesForUrl.spec.d.ts} +0 -0
  168. /package/dist/{src/services → services}/getParamsForString.d.ts +0 -0
  169. /package/dist/{src/services → services}/getRejectionHooks.d.ts +0 -0
  170. /package/dist/{src/services → services}/getRouteHooks.d.ts +0 -0
  171. /package/dist/{src/services/paramsFinder.spec.d.ts → services/getRouteHooks.spec.d.ts} +0 -0
  172. /package/dist/{src/services/queryParamFilter.spec.d.ts → services/getRoutesForRouter.spec.d.ts} +0 -0
  173. /package/dist/{src/services/routeRegex.spec.d.ts → services/history.browser.spec.d.ts} +0 -0
  174. /package/dist/{src/services → services}/history.d.ts +0 -0
  175. /package/dist/{src/services/state.spec.d.ts → services/hooks.browser.spec.d.ts} +0 -0
  176. /package/dist/{src/services → services}/hooks.d.ts +0 -0
  177. /package/dist/{src/tests → services}/hooks.spec.d.ts +0 -0
  178. /package/dist/{src/services → services}/insertBaseRoute.d.ts +0 -0
  179. /package/dist/{src/services/tupleOf.spec.d.ts → services/insertBaseRoute.spec.d.ts} +0 -0
  180. /package/dist/{src/services → services}/literal.d.ts +0 -0
  181. /package/dist/{src/services → services}/params.d.ts +0 -0
  182. /package/dist/{src/services/unionOf.spec.d.ts → services/params.spec.d.ts} +0 -0
  183. /package/dist/{src/services → services}/paramsFinder.d.ts +0 -0
  184. /package/dist/{src/services/urlParser.spec.d.ts → services/paramsFinder.spec.d.ts} +0 -0
  185. /package/dist/{src/services → services}/queryParamFilter.d.ts +0 -0
  186. /package/dist/{src/services/valibot.spec-d.d.ts → services/queryParamFilter.spec.d.ts} +0 -0
  187. /package/dist/{src/services → services}/routeRegex.d.ts +0 -0
  188. /package/dist/{src/services/valibot.spec.d.ts → services/routeRegex.spec.d.ts} +0 -0
  189. /package/dist/{src/services → services}/state.d.ts +0 -0
  190. /package/dist/{src/services/withParams.spec-d.d.ts → services/state.spec.d.ts} +0 -0
  191. /package/dist/{src/services → services}/tupleOf.d.ts +0 -0
  192. /package/dist/{src/services/withParams.spec.d.ts → services/tupleOf.spec.d.ts} +0 -0
  193. /package/dist/{src/services → services}/unionOf.d.ts +0 -0
  194. /package/dist/{src/services/zod.spec-d.d.ts → services/unionOf.spec.d.ts} +0 -0
  195. /package/dist/{src/services → services}/urlParser.d.ts +0 -0
  196. /package/dist/{src/services/zod.spec.d.ts → services/urlParser.spec.d.ts} +0 -0
  197. /package/dist/{src/services → services}/valibot.d.ts +0 -0
  198. /package/dist/{src/tests/routeProps.browser.spec.d.ts → services/valibot.spec-d.d.ts} +0 -0
  199. /package/dist/{src/tests/routeProps.spec.d.ts → services/valibot.spec.d.ts} +0 -0
  200. /package/dist/{src/services → services}/withDefault.d.ts +0 -0
  201. /package/dist/{src/services → services}/withParams.d.ts +0 -0
  202. /package/dist/{src/types/redirects.spec-d.d.ts → services/withParams.spec-d.d.ts} +0 -0
  203. /package/dist/{src/types/register.spec.d.ts → services/withParams.spec.d.ts} +0 -0
  204. /package/dist/{src/services → services}/zod.d.ts +0 -0
  205. /package/dist/{src/types/resolved.spec-d.d.ts → services/zod.spec-d.d.ts} +0 -0
  206. /package/dist/{src/types/route.spec-d.d.ts → services/zod.spec.d.ts} +0 -0
  207. /package/dist/{src/types/routeTitle.browser.spec.d.ts → tests/hooks.spec.d.ts} +0 -0
  208. /package/dist/{src/types/routeWithParams.spec-d.d.ts → tests/routeLoaders.browser.spec.d.ts} +0 -0
  209. /package/dist/{src/types/routesMap.spec-ts.d.ts → tests/routeLoaders.spec.d.ts} +0 -0
  210. /package/dist/{src/utilities/checkDuplicateNames.spec.d.ts → tests/routeProps.browser.spec.d.ts} +0 -0
  211. /package/dist/{src/utilities/checkDuplicateParams.spec.d.ts → tests/routeProps.spec.d.ts} +0 -0
  212. /package/dist/{src/types → types}/callbackContext.d.ts +0 -0
  213. /package/dist/{src/types → types}/meta.d.ts +0 -0
  214. /package/dist/{src/types → types}/name.d.ts +0 -0
  215. /package/dist/{src/types → types}/paramTypes.d.ts +0 -0
  216. /package/dist/{src/types → types}/params.d.ts +0 -0
  217. /package/dist/{src/types → types}/querySource.d.ts +0 -0
  218. /package/dist/{src/types → types}/redirects.d.ts +0 -0
  219. /package/dist/{src/utilities/components.spec.d.ts → types/redirects.spec-d.d.ts} +0 -0
  220. /package/dist/{src/types → types}/register.d.ts +0 -0
  221. /package/dist/{src/utilities/guards.spec.d.ts → types/register.spec.d.ts} +0 -0
  222. /package/dist/{src/types → types}/rejection.d.ts +0 -0
  223. /package/dist/{src/utilities/isBrowser.browser.spec.d.ts → types/resolved.spec-d.d.ts} +0 -0
  224. /package/dist/{src/utilities/isBrowser.spec.d.ts → types/route.spec-d.d.ts} +0 -0
  225. /package/dist/{src/types → types}/routeContext.d.ts +0 -0
  226. /package/dist/{src/utilities/prefetch.spec.d.ts → types/routeTitle.browser.spec.d.ts} +0 -0
  227. /package/dist/{src/types → types}/routeTitle.d.ts +0 -0
  228. /package/dist/{src/types → types}/routeUpdate.d.ts +0 -0
  229. /package/dist/{src/types → types}/routeWithParams.d.ts +0 -0
  230. /package/dist/{src/utilities/trailingSlashes.spec.d.ts → types/routeWithParams.spec-d.d.ts} +0 -0
  231. /package/dist/{src/types → types}/router.d.ts +0 -0
  232. /package/dist/{src/types → types}/routerAbort.d.ts +0 -0
  233. /package/dist/{src/types → types}/routerLink.d.ts +0 -0
  234. /package/dist/{src/types → types}/routerPush.d.ts +0 -0
  235. /package/dist/{src/types → types}/routerReject.d.ts +0 -0
  236. /package/dist/{src/types → types}/routerReplace.d.ts +0 -0
  237. /package/dist/{src/types → types}/routerResolve.d.ts +0 -0
  238. /package/dist/{src/types → types}/routesMap.d.ts +0 -0
  239. /package/dist/{src/utilities/urlSearchParams.spec.d.ts → types/routesMap.spec-ts.d.ts} +0 -0
  240. /package/dist/{src/types → types}/state.d.ts +0 -0
  241. /package/dist/{src/types → types}/url.d.ts +0 -0
  242. /package/dist/{src/types → types}/urlString.d.ts +0 -0
  243. /package/dist/{src/types → types}/useLink.d.ts +0 -0
  244. /package/dist/{src/utilities → utilities}/array.d.ts +0 -0
  245. /package/dist/{src/utilities → utilities}/checkDuplicateNames.d.ts +0 -0
  246. /package/dist/{src/utilities → utilities}/checkDuplicateParams.d.ts +0 -0
  247. /package/dist/{src/utilities → utilities}/components.d.ts +0 -0
  248. /package/dist/{src/utilities → utilities}/guards.d.ts +0 -0
  249. /package/dist/{src/utilities → utilities}/index.d.ts +0 -0
  250. /package/dist/{src/utilities → utilities}/isBrowser.d.ts +0 -0
  251. /package/dist/{src/utilities → utilities}/isNamedRoute.d.ts +0 -0
  252. /package/dist/{src/utilities → utilities}/makeOptional.d.ts +0 -0
  253. /package/dist/{src/utilities → utilities}/promises.d.ts +0 -0
  254. /package/dist/{src/utilities → utilities}/setDocumentTitle.d.ts +0 -0
  255. /package/dist/{src/utilities → utilities}/trailingSlashes.d.ts +0 -0
  256. /package/dist/{src/utilities → utilities}/urlSearchParams.d.ts +0 -0
@@ -1,22 +1,20 @@
1
1
  import { Component } from 'vue';
2
- import { CombineMeta } from '../services/combineMeta';
3
- import { CombineState } from '../services/combineState';
4
2
  import { Param } from './paramTypes';
5
3
  import { PrefetchConfig } from './prefetch';
6
4
  import { RouteMeta } from './register';
7
5
  import { Route } from './route';
8
- import { ResolvedRoute } from './resolved';
6
+ import { ResolvedRoute, WithData } from './resolved';
9
7
  import { ComponentProps } from '../services/component';
10
8
  import { PropsCallbackContext } from './props';
11
- import { Identity, MaybePromise } from './utilities';
9
+ import { AnyFunction, Identity, MaybePromise } from './utilities';
12
10
  import { ToMeta } from './meta';
13
- import { ToState } from './state';
14
11
  import { ToName } from './name';
15
12
  import { UrlPart, UrlQueryPart } from '../services/withParams';
16
- import { RouteContext, ToRouteContext } from './routeContext';
13
+ import { RouteContext } from './routeContext';
17
14
  import { RouterViewProps } from '../components/routerView';
18
15
  import { ToUrl } from './url';
19
16
  import { CombineUrl } from '../services/combineUrl';
17
+ import { RouteView } from './routeViews';
20
18
  export type WithHost<THost extends string | UrlPart = string | UrlPart> = {
21
19
  /**
22
20
  * Host part of URL.
@@ -44,15 +42,9 @@ type WithoutComponents = {
44
42
  export declare function isWithComponent<T extends Record<string, unknown>>(options: T): options is T & {
45
43
  component: Component;
46
44
  };
47
- export declare function isWithComponentProps<T extends Record<string, unknown>>(options: T): options is T & {
48
- props: PropsGetter;
49
- };
50
45
  export declare function isWithComponents<T extends Record<string, unknown>>(options: T): options is T & {
51
46
  components: Record<string, Component>;
52
47
  };
53
- export declare function isWithComponentPropsRecord<T extends Record<string, unknown>>(options: T): options is T & {
54
- props: RoutePropsRecord;
55
- };
56
48
  export type CreateRouteOptions<TName extends string | undefined = string | undefined, TMeta extends RouteMeta = RouteMeta> = {
57
49
  /**
58
50
  * Name for route, used to create route keys and in navigation.
@@ -90,10 +82,13 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
90
82
  * An optional component to render when this route is matched.
91
83
  *
92
84
  * @default RouterView
85
+ * @deprecated Use the chainable `addView` method on the route instead: `createRoute({ ... }).addView(component, { props })`.
93
86
  */
94
87
  component?: Component;
95
88
  /**
96
89
  * An object of named components to render using named views
90
+ *
91
+ * @deprecated Use the chainable `addView` method on the route instead: `createRoute({ ... }).addView(component, { name, props })`.
97
92
  */
98
93
  components?: Record<string, Component>;
99
94
  /**
@@ -105,32 +100,58 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
105
100
  */
106
101
  hoist?: boolean;
107
102
  };
108
- export type PropsGetter<TOptions extends CreateRouteOptions = CreateRouteOptions, TComponent extends Component = Component> = (route: ResolvedRoute<ToRoute<TOptions>>, context: PropsCallbackContext<ToRoute<TOptions>, TOptions>) => MaybePromise<ComponentProps<TComponent>>;
109
- export type RouterViewPropsGetter<TOptions extends CreateRouteOptions = CreateRouteOptions> = (route: ResolvedRoute<ToRoute<TOptions>>, context: PropsCallbackContext<ToRoute<TOptions>, TOptions>) => MaybePromise<RouterViewProps & Record<string, unknown>>;
110
- type ComponentPropsAreOptional<TComponent extends Component> = Partial<ComponentProps<TComponent>> extends ComponentProps<TComponent> ? true : false;
103
+ export type PropsGetter<TOptions extends CreateRouteOptions = CreateRouteOptions, TComponent extends Component = Component> = (route: ResolvedRoute<ToRoute<TOptions>> & WithData<ToRoute<TOptions>>, context: PropsCallbackContext<ToRoute<TOptions>, TOptions>) => MaybePromise<ComponentProps<TComponent>>;
104
+ export type RouterViewPropsGetter<TOptions extends CreateRouteOptions = CreateRouteOptions> = (route: ResolvedRoute<ToRoute<TOptions>> & WithData<ToRoute<TOptions>>, context: PropsCallbackContext<ToRoute<TOptions>, TOptions>) => MaybePromise<RouterViewProps & Record<string, unknown>>;
105
+ export type ComponentPropsAreOptional<TComponent extends Component> = Partial<ComponentProps<TComponent>> extends ComponentProps<TComponent> ? true : false;
111
106
  type RoutePropsRecord<TOptions extends CreateRouteOptions = CreateRouteOptions, TComponents extends Record<string, Component> = Record<string, Component>> = {
112
107
  [K in keyof TComponents as ComponentPropsAreOptional<TComponents[K]> extends true ? K : never]?: PropsGetter<TOptions, TComponents[K]>;
113
108
  } & {
114
109
  [K in keyof TComponents as ComponentPropsAreOptional<TComponents[K]> extends false ? K : never]: PropsGetter<TOptions, TComponents[K]>;
115
110
  };
116
111
  export type CreateRouteProps<TOptions extends CreateRouteOptions = CreateRouteOptions> = TOptions['component'] extends Component ? PropsGetter<TOptions, TOptions['component']> : TOptions['components'] extends Record<string, Component> ? RoutePropsRecord<TOptions, TOptions['components']> : RouterViewPropsGetter<TOptions>;
117
- type ToMatch<TOptions extends CreateRouteOptions, TProps> = Omit<TOptions, 'props' | 'meta' | 'name'> & {
112
+ type ToMatch<TOptions extends CreateRouteOptions, TProps = undefined> = Omit<TOptions, 'meta' | 'name' | 'component' | 'components' | 'parent'> & {
118
113
  id: string;
119
114
  name: ToName<TOptions['name']>;
120
- props: TProps;
121
115
  /**
122
116
  * Represents additional metadata associated with a route. Always present, defaults to empty object.
123
117
  */
124
118
  meta: ToMeta<TOptions['meta']>;
119
+ /**
120
+ * The views this route renders, keyed by view name.
121
+ */
122
+ views: PropsToViews<TProps>;
123
+ /**
124
+ * The loaders this route runs, keyed by loader name. Always empty here — loaders are only added via
125
+ * the route's `addLoader`.
126
+ */
127
+ loaders: {};
125
128
  };
126
- type ToMatches<TOptions extends CreateRouteOptions, TProps extends CreateRouteProps<TOptions> | undefined> = TOptions extends {
129
+ /**
130
+ * The matches for a route, from greatest ancestor to the route itself. Each carries its own views, so
131
+ * there is no second tuple to keep aligned with this one.
132
+ */
133
+ type ToMatches<TOptions extends CreateRouteOptions, TProps = undefined> = TOptions extends {
127
134
  parent: infer TParent extends Route;
128
- } ? [...TParent['matches'], ToMatch<TOptions, TProps>] : [ToMatch<Identity<TOptions & WithoutComponents>, TProps>];
129
- export type ToRoute<TOptions extends CreateRouteOptions, TProps extends CreateRouteProps<TOptions> | undefined = undefined> = CreateRouteOptions extends TOptions ? Route : TOptions extends {
135
+ } ? [...TParent['matches'], ToMatch<TOptions, TProps>] : [ToMatch<TOptions, TProps>];
136
+ /**
137
+ * Builds a views record from the props argument, which is either a single getter for the unnamed view or
138
+ * a record of getters keyed by view name.
139
+ */
140
+ type PropsToViews<TProps> = [TProps] extends [AnyFunction] ? {
141
+ default: RouteView<ReturnType<TProps>>;
142
+ } : [TProps] extends [Record<string, AnyFunction>] ? {
143
+ [K in keyof TProps]: RouteView<ReturnType<TProps[K]>>;
144
+ } : {};
145
+ /**
146
+ * The url a route resolves to, combined with its parent's unless the route is hoisted.
147
+ */
148
+ export type ToRouteUrl<TOptions extends CreateRouteOptions> = TOptions extends {
130
149
  parent: infer TParent extends Route;
131
- } ? Route<ToName<TOptions['name']>, TOptions['hoist'] extends true ? ToUrl<TOptions & WithoutComponents> : CombineUrl<TParent, ToUrl<TOptions & WithoutComponents>>, CombineMeta<ToMeta<TParent['meta']>, ToMeta<TOptions['meta']>>, CombineState<ToState<TParent['state']>, ToState<TOptions['state']>>, ToMatches<TOptions, CreateRouteProps<TOptions> extends TProps ? undefined : TProps>, [
132
- ...ToRouteContext<TParent['context']>,
133
- ...ToRouteContext<TOptions['context']>
134
- ]> : Route<ToName<TOptions['name']>, ToUrl<Identity<TOptions & WithoutComponents>>, ToMeta<TOptions['meta']>, ToState<TOptions['state']>, ToMatches<TOptions, CreateRouteProps<TOptions> extends TProps ? undefined : TProps>, ToRouteContext<TOptions['context']>>;
150
+ } ? TOptions['hoist'] extends true ? ToUrl<TOptions & WithoutComponents> : CombineUrl<TParent, ToUrl<TOptions & WithoutComponents>> : ToUrl<Identity<TOptions & WithoutComponents>>;
151
+ /**
152
+ * The matches for a route, with the props argument resolved to the views of its own match.
153
+ */
154
+ export type ToRouteMatches<TOptions extends CreateRouteOptions, TProps> = ToMatches<TOptions, CreateRouteProps<TOptions> extends TProps ? undefined : TProps>;
155
+ export type ToRoute<TOptions extends CreateRouteOptions, TProps extends CreateRouteProps<TOptions> | undefined = undefined> = CreateRouteOptions extends TOptions ? Route : Route<ToRouteUrl<TOptions>, ToRouteMatches<TOptions, TProps>>;
135
156
  export declare function combineRoutes(parent: Route, child: Route): Route;
136
157
  export {};
@@ -150,7 +150,7 @@ export type RejectionHookRunner<TRejection extends Rejection = Rejection, TRoute
150
150
  export type ErrorHookContext<TRoute extends Route = Route, TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = {
151
151
  to: RouterResolvedRouteUnion<TRoutes>;
152
152
  from: RouterResolvedRouteUnion<TRoutes> | null;
153
- source: 'props' | 'hook' | 'component';
153
+ source: 'props' | 'loader' | 'hook' | 'component';
154
154
  reject: RouterReject<TRejections>;
155
155
  push: RouterPush<TRoutes>;
156
156
  replace: RouterReplace<TRoutes>;
@@ -161,7 +161,7 @@ export type AddErrorHook<TRoute extends Route = Route, TRoutes extends Routes =
161
161
  export type ErrorHookRunnerContext<TRoutes extends Routes = Routes> = {
162
162
  to: RouterResolvedRouteUnion<TRoutes>;
163
163
  from: RouterResolvedRouteUnion<TRoutes> | null;
164
- source: 'props' | 'hook';
164
+ source: 'props' | 'loader' | 'hook';
165
165
  };
166
166
  export type ErrorHookRunner = (error: unknown, context: ErrorHookRunnerContext) => void;
167
167
  export {};
@@ -23,5 +23,6 @@ export type PrefetchConfig = boolean | PrefetchStrategy | PrefetchConfigOptions;
23
23
  export type PrefetchConfigs = {
24
24
  routerPrefetch?: PrefetchConfig;
25
25
  routePrefetch?: PrefetchConfig;
26
+ viewPrefetch?: PrefetchConfig;
26
27
  linkPrefetch?: PrefetchConfig;
27
28
  };
@@ -1,4 +1,4 @@
1
- import { CreateRouteOptions, PropsGetter } from './createRouteOptions';
1
+ import { CreateRouteOptions } from './createRouteOptions';
2
2
  import { Route } from './route';
3
3
  import { RouterReject } from './routerReject';
4
4
  import { RouterPush } from './routerPush';
@@ -6,6 +6,9 @@ import { RouterReplace } from './routerReplace';
6
6
  import { ExtractRouteContextRejections, ExtractRouteContextRoutes } from './routeContext';
7
7
  import { ResolvedRoute } from './resolved';
8
8
  import { RouteUpdate } from './routeUpdate';
9
+ import { LoadersDataReturnType } from './routeLoaders';
10
+ import { ViewsPropsReturnType } from './routeViews';
11
+ import { LastInArray } from './utilities';
9
12
  /**
10
13
  * Context provided to props callback functions
11
14
  */
@@ -19,11 +22,16 @@ export type PropsCallbackContext<TRoute extends Route = Route, TOptions extends
19
22
  export type PropsCallbackParent<TParent extends Route | undefined = Route | undefined> = Route | undefined extends TParent ? undefined | {
20
23
  name: string;
21
24
  props: unknown;
25
+ data: unknown;
22
26
  } : TParent extends Route ? {
23
27
  name: TParent['name'];
24
28
  props: GetParentPropsReturnType<TParent>;
29
+ data: GetParentDataReturnType<TParent>;
25
30
  } : undefined;
26
- type GetParentPropsReturnType<TParent extends Route | undefined = Route | undefined> = TParent extends Route ? TParent['matched']['props'] extends PropsGetter ? ReturnType<TParent['matched']['props']> : TParent['matched']['props'] extends Record<string, PropsGetter> ? {
27
- [K in keyof TParent['matched']['props']]: ReturnType<TParent['matched']['props'][K]>;
28
- } : undefined : undefined;
31
+ type GetParentPropsReturnType<TParent extends Route | undefined = Route | undefined> = TParent extends Route ? LastInArray<TParent['matches']> extends {
32
+ views: infer TViews;
33
+ } ? ViewsPropsReturnType<TViews> : undefined : undefined;
34
+ type GetParentDataReturnType<TParent extends Route | undefined = Route | undefined> = TParent extends Route ? LastInArray<TParent['matches']> extends {
35
+ loaders: infer TLoaders;
36
+ } ? LoadersDataReturnType<TLoaders> : undefined : undefined;
29
37
  export {};
@@ -1,7 +1,13 @@
1
- import { Route, Routes } from './route';
1
+ import { CreatedRouteOptions, Route, RouteDataOf, Routes } from './route';
2
+ import { LastInArray } from './utilities';
2
3
  import { ExtractRouteStateParamsAsOptional } from './state';
3
4
  import { UrlString } from './urlString';
4
5
  import { UrlParamsReading } from './url';
6
+ /**
7
+ * The match a route resolved to, which is the last of its matches. Falls back to the wide match type when
8
+ * the matches are not a concrete tuple, so an unregistered router stays assignable.
9
+ */
10
+ type MatchedRoute<TMatches> = LastInArray<TMatches, CreatedRouteOptions> extends infer TMatched ? unknown extends TMatched ? CreatedRouteOptions : TMatched : never;
5
11
  /**
6
12
  * Represents a route that the router has matched to current browser location.
7
13
  * @template TRoute - Underlying Route that has been resolved.
@@ -14,7 +20,7 @@ export type ResolvedRoute<TRoute extends Route = Route> = Readonly<{
14
20
  /**
15
21
  * The specific route properties that were matched in the current route.
16
22
  */
17
- matched: TRoute['matched'];
23
+ matched: MatchedRoute<TRoute['matches']>;
18
24
  /**
19
25
  * The specific route properties that were matched in the current route, including any ancestors.
20
26
  * Order of routes will be from greatest ancestor to narrowest matched.
@@ -49,6 +55,18 @@ export type ResolvedRoute<TRoute extends Route = Route> = Readonly<{
49
55
  */
50
56
  title: Promise<string | undefined>;
51
57
  }>;
58
+ /**
59
+ * A resolved route whose loaders' data is available. Only the route being navigated to has data: a route
60
+ * the router merely resolved is not being loaded, so data on it could never settle. The current route and
61
+ * a props getter's route have it, `router.resolve` and hooks do not.
62
+ */
63
+ export type WithData<TRoute extends Route = Route> = {
64
+ /**
65
+ * What the route's loaders resolve to, keyed by loader name. A route whose only loader is unnamed
66
+ * exposes that loader's data here directly. Always promises, since loaders never block rendering.
67
+ */
68
+ data: RouteDataOf<TRoute['matches']>;
69
+ };
52
70
  /**
53
71
  * This type is the same as `ResolvedRoute<TRoutes[number]>` while remaining distributive
54
72
  */
@@ -65,3 +83,4 @@ export type RouterResolvedRouteUnion<TRoutes extends Routes> = {
65
83
  * type ResolvedUnion = ResolvedRouteUnion<RouteUnion> // ResolvedRoute<RouteA> | ResolvedRoute<RouteB>
66
84
  */
67
85
  export type ResolvedRouteUnion<TRoute extends Route> = TRoute extends Route ? ResolvedRoute<TRoute> : never;
86
+ export {};
@@ -0,0 +1,121 @@
1
+ import { Param } from './paramTypes';
2
+ import { PrefetchConfig } from './prefetch';
3
+ import { RouteMeta } from './register';
4
+ import { LastInArray } from './utilities';
5
+ import { CreateRouteOptions } from './createRouteOptions';
6
+ import { RouteContext, ToRouteContext } from './routeContext';
7
+ import { ToMeta } from './meta';
8
+ import { ToState } from './state';
9
+ import { Url } from './url';
10
+ import { GetRouteTitle } from './routeTitle';
11
+ import { Hooks } from '../models/hooks';
12
+ import { RouteRedirect } from './redirects';
13
+ import { RouteViews } from './routeViews';
14
+ import { LoadersDataReturnType, RouteLoaders } from './routeLoaders';
15
+ export declare const IS_ROUTE_SYMBOL: unique symbol;
16
+ export declare function isRoute(value: unknown): value is Route & RouteInternal;
17
+ export type RouteInternal = {
18
+ [IS_ROUTE_SYMBOL]: true;
19
+ depth: number;
20
+ hooks: Hooks[];
21
+ redirect: RouteRedirect;
22
+ getTitle: GetRouteTitle;
23
+ };
24
+ /**
25
+ * Represents an immutable array of Route instances. Return value of `createRoute`, expected param for `createRouter`.
26
+ */
27
+ export type Routes = readonly Route[];
28
+ /**
29
+ * The Route properties originally provided to `createRoute`, plus the views that route renders and the
30
+ * loaders it runs. The deprecated `component`/`components` options are folded into `views` (see
31
+ * {@link RouteViews}).
32
+ */
33
+ export type CreatedRouteOptions = Omit<CreateRouteOptions, 'component' | 'components'> & {
34
+ id: string;
35
+ views: RouteViews;
36
+ loaders: RouteLoaders;
37
+ };
38
+ /**
39
+ * The name of the narrowest matched route.
40
+ */
41
+ type RouteNameOf<TMatches extends CreatedRouteOptions[]> = LastInArray<TMatches> extends {
42
+ name: infer TName extends string;
43
+ } ? TName : string;
44
+ /**
45
+ * The meta of every matched route, combined. Mirrors `combineMeta`, which is an intersection.
46
+ */
47
+ type RouteMetaOf<TMatches extends CreatedRouteOptions[]> = CreatedRouteOptions[] extends TMatches ? RouteMeta : TMatches extends [infer THead, ...infer TRest extends CreatedRouteOptions[]] ? ToMeta<THead extends {
48
+ meta: infer TMeta extends RouteMeta;
49
+ } ? TMeta : undefined> & RouteMetaOf<TRest> : {};
50
+ /**
51
+ * The state of every matched route, combined. Mirrors `combineState`, which is an intersection.
52
+ * A match without state contributes `{}` rather than `ToState<undefined>`, which widens to
53
+ * `Record<string, Param>` and would swallow the rest of the intersection.
54
+ */
55
+ type RouteStateOf<TMatches extends CreatedRouteOptions[]> = CreatedRouteOptions[] extends TMatches ? Record<string, Param> : TMatches extends [infer THead, ...infer TRest extends CreatedRouteOptions[]] ? (THead extends {
56
+ state: infer TState extends Record<string, Param>;
57
+ } ? ToState<TState> : {}) & RouteStateOf<TRest> : {};
58
+ /**
59
+ * The loaders of every matched route, combined. A plain intersection: a loader name is unique across a
60
+ * route and its ancestors, which `addLoader` enforces.
61
+ */
62
+ type RouteLoadersOf<TMatches extends CreatedRouteOptions[]> = CreatedRouteOptions[] extends TMatches ? RouteLoaders : TMatches extends [infer THead, ...infer TRest extends CreatedRouteOptions[]] ? (THead extends {
63
+ loaders: infer TLoaders extends RouteLoaders;
64
+ } ? TLoaders : {}) & RouteLoadersOf<TRest> : {};
65
+ /**
66
+ * The data every matched route's loaders resolve to, which is what a resolved route exposes as `data`.
67
+ * Undefined when nothing in the route tree declares a loader.
68
+ */
69
+ export type RouteDataOf<TMatches extends CreatedRouteOptions[]> = CreatedRouteOptions[] extends TMatches ? Promise<unknown> | Record<string, Promise<unknown>> | undefined : LoadersDataReturnType<RouteLoadersOf<TMatches>>;
70
+ /**
71
+ * The context of every matched route, flattened from greatest ancestor to narrowest matched.
72
+ */
73
+ type RouteContextOf<TMatches extends CreatedRouteOptions[]> = CreatedRouteOptions[] extends TMatches ? RouteContext[] : TMatches extends [infer THead, ...infer TRest extends CreatedRouteOptions[]] ? [...ToRouteContext<THead extends {
74
+ context: infer TContext extends RouteContext[];
75
+ } ? TContext : []>, ...RouteContextOf<TRest>] : [];
76
+ /**
77
+ * Represents the structure of a route within the application. Return value of `createRoute`
78
+ * @template TUrl - The url the route resolves to, combined with any parents. Intersected into the route.
79
+ * @template TMatches - The options of the route and its ancestors, indexed by depth. Name, meta, state,
80
+ * and context are all derived from this, including each route's views.
81
+ */
82
+ export type Route<TUrl extends Url = Url, TMatches extends CreatedRouteOptions[] = CreatedRouteOptions[]> = TUrl & {
83
+ /**
84
+ * Unique identifier for the route, generated by router.
85
+ */
86
+ id: string;
87
+ /**
88
+ * The specific route properties that were matched in the current route, including any ancestors.
89
+ * Order of routes will be from greatest ancestor to narrowest matched.
90
+ */
91
+ matches: TMatches;
92
+ /**
93
+ * Identifier for the route as defined by user. Name must be unique among named routes. Name is used for routing and for matching.
94
+ */
95
+ name: RouteNameOf<TMatches>;
96
+ /**
97
+ * Represents additional metadata associated with a route, combined with any parents.
98
+ */
99
+ meta: RouteMetaOf<TMatches>;
100
+ /**
101
+ * Represents the schema of the route state, combined with any parents.
102
+ */
103
+ state: RouteStateOf<TMatches>;
104
+ /**
105
+ * Determines what assets are prefetched when router-link is rendered for this route. Overrides router level prefetch.
106
+ */
107
+ prefetch?: PrefetchConfig;
108
+ /**
109
+ * Related routes and rejections for the route. The context is exposed to the hooks and props callback functions for this route.
110
+ */
111
+ context: RouteContextOf<TMatches>;
112
+ };
113
+ export type GenericRoute = Url & {
114
+ id: string;
115
+ name: string;
116
+ matches: CreatedRouteOptions[];
117
+ meta: RouteMeta;
118
+ state: Record<string, Param>;
119
+ prefetch?: PrefetchConfig;
120
+ };
121
+ export {};
@@ -0,0 +1,30 @@
1
+ import { ResolvedRoute } from './resolved';
2
+ import { CreatedRouteOptions, Route } from './route';
3
+ import { RouteContextToRejection, RouteContextToRoute } from './routeContext';
4
+ import { RouterPush } from './routerPush';
5
+ import { RouterReject } from './routerReject';
6
+ import { RouterReplace } from './routerReplace';
7
+ import { RouteUpdate } from './routeUpdate';
8
+ import { LoadersDataReturnType } from './routeLoaders';
9
+ import { ViewsPropsReturnType } from './routeViews';
10
+ /**
11
+ * Context provided to a callback attached to a route — an `addView` props getter, or a loader. Sourced
12
+ * from the route: rejections/routes from the route's context, and the parent from the route's `matches`.
13
+ */
14
+ export type RouteCallbackContext<TRoute extends Route> = {
15
+ reject: RouterReject<RouteContextToRejection<TRoute['context']>>;
16
+ push: RouterPush<[TRoute] | RouteContextToRoute<TRoute['context']>>;
17
+ replace: RouterReplace<[TRoute] | RouteContextToRoute<TRoute['context']>>;
18
+ update: RouteUpdate<ResolvedRoute<TRoute>>;
19
+ parent: RouteCallbackParent<TRoute>;
20
+ };
21
+ /**
22
+ * The parent context ({ name, props, data }) reconstructed from the second-to-last `matches` entry, which
23
+ * carries the parent's name, its views and its loaders.
24
+ */
25
+ type RouteCallbackParent<TRoute extends Route> = TRoute['matches'] extends [...CreatedRouteOptions[], infer TParent extends CreatedRouteOptions, CreatedRouteOptions] ? {
26
+ name: TParent['name'];
27
+ props: ViewsPropsReturnType<TParent['views']>;
28
+ data: LoadersDataReturnType<TParent['loaders']>;
29
+ } : undefined;
30
+ export {};
@@ -0,0 +1,30 @@
1
+ import { PrefetchConfig } from './prefetch';
2
+ import { AnyFunction } from './utilities';
3
+ /**
4
+ * A single loader: how to load its data, and how to prefetch it. Unlike a view, a loader always has a
5
+ * getter — a loader without one would have nothing to contribute.
6
+ *
7
+ * @template TData - What this loader's getter returns, carried so a route's data can be typed from it.
8
+ */
9
+ export type RouteLoader<TData = unknown> = {
10
+ load: AnyFunction<TData>;
11
+ prefetch?: PrefetchConfig;
12
+ };
13
+ /**
14
+ * The loaders for a single route, keyed by loader name (the unnamed loader under 'default').
15
+ */
16
+ export type RouteLoaders = Record<string, RouteLoader>;
17
+ /**
18
+ * The data a set of loaders resolves to. A lone unnamed loader is given directly rather than under a
19
+ * 'default' key, matching how the loader is written. Each loader's data is always a promise, since a
20
+ * loader never blocks rendering, even when the loader itself is synchronous.
21
+ */
22
+ export type LoadersDataReturnType<TLoaders> = keyof TLoaders extends never ? undefined : keyof TLoaders extends 'default' ? LoaderData<Extract<TLoaders, {
23
+ default: unknown;
24
+ }>['default']> : {
25
+ [K in keyof TLoaders]: LoaderData<TLoaders[K]>;
26
+ };
27
+ type LoaderData<TLoader> = TLoader extends {
28
+ load: AnyFunction<infer TData>;
29
+ } ? Promise<Awaited<TData>> : never;
30
+ export {};
@@ -0,0 +1,44 @@
1
+ import { Component } from 'vue';
2
+ import { PrefetchConfig } from './prefetch';
3
+ import { AnyFunction } from './utilities';
4
+ /**
5
+ * A single view: what to render, how to get its props, and how to prefetch it. `component` is optional
6
+ * because a route can bind props to the nested RouterView it renders without declaring a component.
7
+ *
8
+ * @template TProps - What this view's props getter returns, carried so parent props can be typed from it.
9
+ */
10
+ export type RouteView<TProps = undefined> = {
11
+ component?: Component;
12
+ props?: AnyFunction<TProps>;
13
+ prefetch?: PrefetchConfig;
14
+ };
15
+ /**
16
+ * The views for a single route, keyed by view name (the unnamed view under 'default'). Indexed by depth in
17
+ * `route.views` — parallel to how `route.matches` indexes the matched options, which is where a route's id
18
+ * comes from at a given depth.
19
+ */
20
+ export type RouteViews = Record<string, RouteView<unknown>>;
21
+ /**
22
+ * The props a child sees for a parent's views. A lone unnamed view is given directly rather than under a
23
+ * 'default' key, matching how the props argument is written. Each view's props are always a promise,
24
+ * since the parent's props may not have been computed when the child's getter runs.
25
+ */
26
+ export type ViewsPropsReturnType<TViews> = keyof ViewsWithProps<TViews> extends never ? undefined : keyof ViewsWithProps<TViews> extends 'default' ? ParentViewProps<Extract<ViewsWithProps<TViews>, {
27
+ default: unknown;
28
+ }>['default']> : {
29
+ [K in keyof ViewsWithProps<TViews>]: ParentViewProps<ViewsWithProps<TViews>[K]>;
30
+ };
31
+ type ViewsWithProps<TViews> = {
32
+ [K in keyof TViews as HasViewProps<TViews[K]> extends true ? K : never]: TViews[K];
33
+ };
34
+ /**
35
+ * A view has props unless its getter is absent, which is carried as props resolving to undefined. Asked
36
+ * both ways because a getter that only ever throws resolves to never, which is assignable to undefined
37
+ * without being the absent case.
38
+ */
39
+ type HasViewProps<TView> = [ViewProps<TView>] extends [undefined] ? [undefined] extends [ViewProps<TView>] ? false : true : true;
40
+ type ViewProps<TView> = TView extends {
41
+ props?: AnyFunction<infer TProps>;
42
+ } ? TProps : undefined;
43
+ type ParentViewProps<TView> = Promise<Awaited<ViewProps<TView>>>;
44
+ export {};
@@ -0,0 +1,16 @@
1
+ import { RouteAddLoader } from './addLoader';
2
+ import { RouteAddView } from './addView';
3
+ import { InternalRouteHooks } from './hooks';
4
+ import { RouteRedirects } from './redirects';
5
+ import { CreatedRouteOptions, Route } from './route';
6
+ import { RouteSetTitle } from './routeTitle';
7
+ import { Url } from './url';
8
+ /**
9
+ * A route plus every chainable/available method: addView, addLoader, hooks, redirects, and title. The type
10
+ * level counterpart to `withRouteMethods`.
11
+ *
12
+ * Takes the url and matches rather than an assembled route so that adding a view or a loader can rebuild
13
+ * from them directly. Taking the route would mean re-deriving the url from it on every call, and that
14
+ * reference is what made chained calls nest one inside the last.
15
+ */
16
+ export type RouteWithMethods<TUrl extends Url = Url, TMatches extends CreatedRouteOptions[] = CreatedRouteOptions[]> = Route<TUrl, TMatches> & RouteAddView<TUrl, TMatches> & RouteAddLoader<TUrl, TMatches> & InternalRouteHooks<Route<TUrl, TMatches>, Route<TUrl, TMatches>['context']> & RouteRedirects<Route<TUrl, TMatches>> & RouteSetTitle<Route<TUrl, TMatches>>;
@@ -49,7 +49,7 @@ type AddPluginAfterRouteHook<TRoutes extends Routes, TRejections extends Rejecti
49
49
  export type PluginErrorHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = {
50
50
  to: ResolvedRoute;
51
51
  from: ResolvedRoute | null;
52
- source: 'props' | 'hook' | 'component';
52
+ source: 'props' | 'loader' | 'hook' | 'component';
53
53
  reject: RouterReject<TRejections>;
54
54
  push: RouterPush<TRoutes>;
55
55
  replace: RouterReplace<TRoutes>;
@@ -1,5 +1,6 @@
1
1
  import { RouteUpdate } from './routeUpdate';
2
2
  import { ResolvedRoute } from './resolved';
3
+ import { RouteDataOf } from './route';
3
4
  import { QuerySource } from './querySource';
4
5
  export type RouterRoute<TRoute extends ResolvedRoute = ResolvedRoute> = {
5
6
  /**
@@ -35,6 +36,11 @@ export type RouterRoute<TRoute extends ResolvedRoute = ResolvedRoute> = {
35
36
  * Title of the route.
36
37
  */
37
38
  readonly title: TRoute['title'];
39
+ /**
40
+ * What the route's loaders resolve to, keyed by loader name. A route whose only loader is unnamed
41
+ * exposes that loader's data here directly.
42
+ */
43
+ readonly data: RouteDataOf<TRoute['matches']>;
38
44
  params: TRoute['params'];
39
45
  state: TRoute['state'];
40
46
  get query(): URLSearchParams;
@@ -4,6 +4,7 @@ export type Identity<T> = T extends object ? {} & {
4
4
  type IsEmptyObject<T> = T extends Record<string, never> ? (keyof T extends never ? true : false) : false;
5
5
  export type LastInArray<T, TFallback = never> = T extends [...any[], infer Last] ? Last : TFallback;
6
6
  export type MaybePromise<T> = T | Promise<T>;
7
+ export type AnyFunction<TReturn = any> = (...args: any[]) => TReturn;
7
8
  type OnlyRequiredProperties<T> = {
8
9
  [K in keyof T as Extract<T[K], undefined> extends never ? K : never]: T[K];
9
10
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
1
  import { PrefetchConfig, PrefetchConfigOptions, PrefetchConfigs, PrefetchStrategy } from '../types/prefetch';
2
2
  export declare const DEFAULT_PREFETCH_STRATEGY: PrefetchStrategy;
3
- export declare function getPrefetchOption({ routerPrefetch, routePrefetch, linkPrefetch }: PrefetchConfigs, setting: keyof PrefetchConfigOptions): false | PrefetchStrategy;
3
+ export declare function getPrefetchOption({ routerPrefetch, routePrefetch, viewPrefetch, linkPrefetch }: PrefetchConfigs, setting: keyof PrefetchConfigOptions): false | PrefetchStrategy;
4
4
  export declare function getPrefetchConfigValue(prefetch: PrefetchConfig | undefined, setting: keyof PrefetchConfigOptions): boolean | PrefetchStrategy | undefined;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { MaybePromise } from '../types/utilities';
2
+ /**
3
+ * How a props getter settled. Tagged so that a getter returning `undefined` or an `Error` stays a value.
4
+ */
5
+ export type PropsResult = {
6
+ kind: 'value';
7
+ value: unknown;
8
+ } | {
9
+ kind: 'error';
10
+ error: unknown;
11
+ };
12
+ /**
13
+ * Runs a props callback and captures how it settled rather than letting it throw, so that navigation can
14
+ * tell a push or rejection apart from a genuine failure. Sync getters settle synchronously.
15
+ */
16
+ export declare function getPropsValue(callback: () => unknown): MaybePromise<PropsResult>;