Skip to content

Commit

Permalink
feat: one single auto import
Browse files Browse the repository at this point in the history
BREAKING CHANGE: `defineLoader()` is now exported from
`unplugin-vue-router/runtime` and is named `_defineLoader()`. If you
were using auto imports, the new `VueRouterAutoImports` object contains
all the autoimports so you don't need to change it.
Refer to https://github.com/posva/unplugin-vue-router/tree/main/src/data-fetching
for up to date information on how to use the data fetching.
  • Loading branch information
posva committed Aug 25, 2022
1 parent 2fbe8fd commit c82e964
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 22 deletions.
3 changes: 2 additions & 1 deletion playground/auto-imports.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// Generated by 'unplugin-auto-import'
export {}
declare global {
const defineLoader: typeof import('vue-router/auto')['defineLoader']
const defineLoader: typeof import('unplugin-vue-router/runtime')['_defineLoader']
const definePage: typeof import('unplugin-vue-router/runtime')['_definePage']
const useRoute: typeof import('vue-router/auto')['useRoute']
const useRouter: typeof import('vue-router/auto')['useRouter']
}
11 changes: 9 additions & 2 deletions playground/typed-router.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,15 @@ declare module 'vue-router/auto' {

export function onBeforeRouteLeave(guard: NavigationGuard<RouteNamedMap>): void
export function onBeforeRouteUpdate(guard: NavigationGuard<RouteNamedMap>): void
}

declare module 'unplugin-vue-router/runtime' {
import type { RouteNamedMap } from 'vue-router/auto/routes'
import type {
RouteLocationNormalizedLoaded,
} from 'vue-router/auto'

export function defineLoader<
export function _defineLoader<
P extends Promise<any>,
Name extends keyof RouteNamedMap = keyof RouteNamedMap,
isLazy extends boolean = false,
Expand All @@ -117,7 +124,7 @@ declare module 'vue-router/auto' {
loader: (route: RouteLocationNormalizedLoaded<Name>) => P,
options?: DefineLoaderOptions<isLazy>,
): DataLoader<Awaited<P>, isLazy>
export function defineLoader<
export function _defineLoader<
P extends Promise<any>,
isLazy extends boolean = false,
>(
Expand Down
14 changes: 5 additions & 9 deletions playground/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import VueRouter from '../src/vite'
import {
getFileBasedRouteName,
getPascalCaseRouteName,
VueRouterExports,
RuntimeExports,
VueRouterAutoImports,
DefinePage,
} from '../src'
import Vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
Expand All @@ -23,9 +23,10 @@ export default defineConfig({
// },

plugins: [
DefinePage.vite(),
Vue({}),
VueRouter({
dataFetching: true,
dataFetching: false,
routesFolder: [
// can add multiple routes folders
{
Expand Down Expand Up @@ -53,12 +54,7 @@ export default defineConfig({
],
}),
AutoImport({
imports: [
{
'vue-router/auto': VueRouterExports,
// 'unplugin-vue-router/runtime': RuntimeExports,
},
],
imports: [VueRouterAutoImports],
}),
Inspect(),
],
Expand Down
11 changes: 9 additions & 2 deletions src/codegen/generateDTS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,15 @@ declare module '${vueRouterModule}' {
export function onBeforeRouteLeave(guard: NavigationGuard<RouteNamedMap>): void
export function onBeforeRouteUpdate(guard: NavigationGuard<RouteNamedMap>): void
}
declare module 'unplugin-vue-router/runtime' {
import type { RouteNamedMap } from '${routesModule}'
import type {
RouteLocationNormalizedLoaded,
} from '${vueRouterModule}'
export function defineLoader<
export function _defineLoader<
P extends Promise<any>,
Name extends keyof RouteNamedMap = keyof RouteNamedMap,
isLazy extends boolean = false,
Expand All @@ -97,7 +104,7 @@ declare module '${vueRouterModule}' {
loader: (route: RouteLocationNormalizedLoaded<Name>) => P,
options?: DefineLoaderOptions<isLazy>,
): DataLoader<Awaited<P>, isLazy>
export function defineLoader<
export function _defineLoader<
P extends Promise<any>,
isLazy extends boolean = false,
>(
Expand Down
36 changes: 29 additions & 7 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,33 @@ export type {
DataLoader,
} from './data-fetching/defineLoader'

// TODO: just export the object with vue-router/auto
export const VueRouterExports = [
'useRoute',
'useRouter',
'defineLoader',
// ['_defineLoader', 'defineLoader'],
export { DefinePage } from './data-fetching/transform'

/**
* @deprecated use `VueRouterAutoImports` instead
*/
export const VueRouterExports = ['useRoute', 'useRouter']

/**
* @deprecated use `VueRouterAutoImports` instead
*/
export const RuntimeExports: [string, string][] = [
['_defineLoader', 'defineLoader'],
['_definePage', 'definePage'],
]
export const RuntimeExports = [['_defineLoader', 'defineLoader']]

/**
* Adds useful auto imports to the AutoImport config:
* @example
* ```js
* import { VueRouterAutoImports } from 'unplugin-vue-router'
*
* AutoImport({
* imports: [VueRouterAutoImports],
* }),
* ```
*/
export const VueRouterAutoImports = {
'vue-router/auto': VueRouterExports,
'unplugin-vue-router/runtime': RuntimeExports,
}
2 changes: 1 addition & 1 deletion src/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export interface ResolvedOptions {
getRouteName: (node: TreeNode) => string

/**
* EXPERIMENTAL: add the data fetching meta properties to generated routes.
* @deprecated: MUST be `false`. See https://github.com/posva/unplugin-vue-router/tree/main/src/data-fetching
*/
dataFetching: boolean

Expand Down
6 changes: 6 additions & 0 deletions src/runtime.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { RouteRecordRaw } from 'vue-router'

export { defineLoader as _defineLoader } from './data-fetching/defineLoader'
export type {
DefineLoaderOptions,
Expand All @@ -8,3 +10,7 @@ export {
LoaderSymbol as _LoaderSymbol,
} from './data-fetching/dataFetchingGuard'
export { stopScope as _stopScope } from './data-fetching/dataCache'

export function _definePage(
route: Partial<Omit<RouteRecordRaw, 'children' | 'components' | 'component'>>
) {}

0 comments on commit c82e964

Please sign in to comment.