Skip to content

Commit

Permalink
refactor: fix reorg
Browse files Browse the repository at this point in the history
  • Loading branch information
posva committed Feb 23, 2024
1 parent 51f42f6 commit bc5c378
Show file tree
Hide file tree
Showing 27 changed files with 216 additions and 152 deletions.
2 changes: 0 additions & 2 deletions client.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ declare module 'vue-router/auto' {
// Experimental Data Fetching
definePage,
DataLoaderPlugin,
defineBasicLoader,
defineColadaLoader,
NavigationResult,
} from 'unplugin-vue-router/runtime'
}
2 changes: 1 addition & 1 deletion playground/src/pages/users/colada-loader.[id].vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script lang="ts">
import { defineColadaLoader } from 'unplugin-vue-router/runtime'
import { defineColadaLoader } from 'unplugin-vue-router/data-loaders/pinia-colada'
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
Expand Down
9 changes: 5 additions & 4 deletions src/codegen/vueRouterModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import type { ResolvedOptions } from '../options'
// cannot be resolved.
export function generateVueRouterProxy(
routesModule: string,
options: ResolvedOptions
options: ResolvedOptions,
{ addPiniaColada }: { addPiniaColada: boolean }
) {
return `
import { routes } from '${routesModule}'
Expand All @@ -16,12 +17,12 @@ export {
definePage,
// new data fetching
DataLoaderPlugin,
// FIXME: automatically add?
// defineBasicLoader,
// defineColadaLoader,
NavigationResult,
} from 'unplugin-vue-router/runtime'
export * from 'unplugin-vue-router/data-loaders/basic'
${addPiniaColada ? "export * from 'unplugin-vue-router/data-loaders/pinia-colada'" : ''}
export function createRouter(options) {
const { extendRoutes } = options
// use Object.assign for better browser support
Expand Down
6 changes: 5 additions & 1 deletion src/core/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { generateDTS as _generateDTS } from '../codegen/generateDTS'
import { generateVueRouterProxy as _generateVueRouterProxy } from '../codegen/vueRouterModule'
import { definePageTransform, extractDefinePageNameAndPath } from './definePage'
import { EditableTreeNode } from './extendRoutes'
import { isPackageExists as isPackageInstalled } from 'local-pkg'

export function createRoutesContext(options: ResolvedOptions) {
const { dts: preferDTS, root, routesFolder } = options
Expand Down Expand Up @@ -198,8 +199,11 @@ export function createRoutesContext(options: ResolvedOptions) {

// NOTE: this code needs to be generated because otherwise it doesn't go through transforms and `vue-router/auto-routes`
// cannot be resolved.
const isPiniaColadaInstalled = isPackageInstalled('@pinia/colada')
function generateVueRouterProxy() {
return _generateVueRouterProxy(MODULE_ROUTES_PATH, options)
return _generateVueRouterProxy(MODULE_ROUTES_PATH, options, {
addPiniaColada: isPiniaColadaInstalled,
})
}

let lastDTS: string | undefined
Expand Down
16 changes: 14 additions & 2 deletions src/core/definePage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export function definePageTransform({
throw new SyntaxError(`duplicate definePage() call`)
}

const definePageNode = definePageNodes[0]
const definePageNode = definePageNodes[0]!
const setupOffset = scriptSetup.loc.start.offset

// we only want the page info
Expand All @@ -71,6 +71,12 @@ export function definePageTransform({

const routeRecord = definePageNode.arguments[0]

if (!routeRecord) {
throw new SyntaxError(
`[${id}]: definePage() expects an object expression as its only argument`
)
}

const scriptBindings = setupAst?.body ? getIdentifiers(setupAst.body) : []

checkInvalidScopeReference(routeRecord, MACRO_DEFINE_PAGE, scriptBindings)
Expand Down Expand Up @@ -130,9 +136,15 @@ export function extractDefinePageNameAndPath(
throw new SyntaxError(`duplicate definePage() call`)
}

const definePageNode = definePageNodes[0]
const definePageNode = definePageNodes[0]!

const routeRecord = definePageNode.arguments[0]
if (!routeRecord) {
throw new SyntaxError(
`[${id}]: definePage() expects an object expression as its only argument`
)
}

if (routeRecord.type !== 'ObjectExpression') {
throw new SyntaxError(
`[${id}]: definePage() expects an object expression as its only argument`
Expand Down
9 changes: 6 additions & 3 deletions src/data-loaders/defineColadaLoader.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@ import {
beforeAll,
afterAll,
} from 'vitest'
import { DataLoaderPlugin, DataLoaderPluginOptions } from './navigation-guard'
import {
DataLoaderPlugin,
DataLoaderPluginOptions,
setCurrentContext,
UseDataLoader,
} from 'unplugin-vue-router/runtime'
import { testDefineLoader } from '../../tests/data-loaders'
import { setCurrentContext } from './utils'
import { UseDataLoader } from './createDataLoader'
import { getRouter } from 'vue-router-mock'
import { enableAutoUnmount, mount } from '@vue/test-utils'
import RouterViewMock from '../../tests/data-loaders/RouterViewMock.vue'
Expand Down
16 changes: 8 additions & 8 deletions src/data-loaders/defineColadaLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import type {
UseDataLoader,
UseDataLoaderResult,
_DataMaybeLazy,
} from './createDataLoader'
_DefineLoaderEntryMap,
} from 'unplugin-vue-router/runtime'
import {
ABORT_CONTROLLER_KEY,
APP_KEY,
Expand All @@ -26,19 +27,17 @@ import {
NAVIGATION_RESULTS_KEY,
PENDING_LOCATION_KEY,
STAGED_NO_VALUE,
_DefineLoaderEntryMap,
} from './meta-extensions'
import {
IS_CLIENT,
NavigationResult,
type _PromiseMerged,
assign,
getCurrentContext,
isSubsetOf,
setCurrentContext,
trackRoute,
} from './utils'
IS_SSR_KEY,
} from 'unplugin-vue-router/runtime'
import {} from './utils'
import { type ShallowRef, shallowRef, watch } from 'vue'
import { NavigationResult } from './navigation-guard'
import {
type UseQueryKey,
type UseQueryOptions,
Expand Down Expand Up @@ -105,6 +104,7 @@ export function defineColadaLoader<Data, isLazy extends boolean>(
]! as unknown as _DefineLoaderEntryMap<
DataLoaderColadaEntry<boolean, unknown>
>
const isSSR = router[IS_SSR_KEY]
const key = keyText(options.key(to))
if (!entries.has(loader)) {
const route = shallowRef<RouteLocationNormalizedLoaded>(to)
Expand Down Expand Up @@ -230,7 +230,7 @@ export function defineColadaLoader<Data, isLazy extends boolean>(
entry.stagedError = newError
// propagate error if non lazy or during SSR
// NOTE: Cannot be handled at the guard level because of nested loaders
if (!options.lazy || !IS_CLIENT) {
if (!options.lazy || isSSR) {
throw newError
}
} else {
Expand Down
9 changes: 6 additions & 3 deletions src/data-loaders/defineLoader.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@ import {
beforeAll,
afterAll,
} from 'vitest'
import { DataLoaderPlugin, DataLoaderPluginOptions } from './navigation-guard'
import {
DataLoaderPlugin,
DataLoaderPluginOptions,
UseDataLoader,
setCurrentContext,
} from 'unplugin-vue-router/runtime'
import { testDefineLoader } from '../../tests/data-loaders'
import { setCurrentContext } from './utils'
import { UseDataLoader } from './createDataLoader'
import { getRouter } from 'vue-router-mock'
import { enableAutoUnmount, mount } from '@vue/test-utils'
import RouterViewMock from '../../tests/data-loaders/RouterViewMock.vue'
Expand Down
8 changes: 4 additions & 4 deletions src/data-loaders/defineLoader.test-d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { describe, it, expectTypeOf } from 'vitest'
import { defineBasicLoader } from './defineLoader'
import { Ref, shallowRef } from 'vue'
import { NavigationResult } from './navigation-guard'
import { Ref } from 'vue'
import { NavigationResult } from 'unplugin-vue-router/runtime'

describe('defineBasicLoader', () => {
interface UserData {
Expand All @@ -12,7 +12,7 @@ describe('defineBasicLoader', () => {
it('uses typed routes', () => {
const useDataLoader = defineBasicLoader('/[name]', async (route) => {
const user = {
id: route.params.name,
id: route.params.name as string,
name: 'Edu',
}

Expand All @@ -24,7 +24,7 @@ describe('defineBasicLoader', () => {
data: Ref<UserData>
error: Ref<unknown>
isLoading: Ref<boolean>
refresh: () => Promise<void>
reload: () => Promise<void>
}
| PromiseLike<UserData>
>(useDataLoader())
Expand Down
14 changes: 9 additions & 5 deletions src/data-loaders/defineLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type {
UseDataLoader,
UseDataLoaderResult,
_DataMaybeLazy,
} from './createDataLoader'
} from 'unplugin-vue-router/runtime'
import {
ABORT_CONTROLLER_KEY,
APP_KEY,
Expand All @@ -21,10 +21,13 @@ import {
NAVIGATION_RESULTS_KEY,
PENDING_LOCATION_KEY,
STAGED_NO_VALUE,
} from './meta-extensions'
import { IS_CLIENT, getCurrentContext, setCurrentContext } from './utils'
NavigationResult,
getCurrentContext,
setCurrentContext,
IS_SSR_KEY,
} from 'unplugin-vue-router/runtime'

import { shallowRef } from 'vue'
import { NavigationResult } from './navigation-guard'

/**
* Creates a data loader composable that can be exported by pages to attach the data loading to a route. This returns a
Expand Down Expand Up @@ -87,6 +90,7 @@ export function defineBasicLoader<Data, isLazy extends boolean>(
parent?: DataLoaderEntryBase
): Promise<void> {
const entries = router[LOADER_ENTRIES_KEY]!
const isSSR = router[IS_SSR_KEY]
if (!entries.has(loader)) {
entries.set(loader, {
// force the type to match
Expand Down Expand Up @@ -191,7 +195,7 @@ export function defineBasicLoader<Data, isLazy extends boolean>(
entry.stagedError = e
// propagate error if non lazy or during SSR
// NOTE: Cannot be handled at the guard level because of nested loaders
if (!options.lazy || !IS_CLIENT) {
if (!options.lazy || isSSR) {
throw e
}
}
Expand Down
6 changes: 4 additions & 2 deletions src/data-loaders/defineQueryLoader.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ import { Ref, shallowRef } from 'vue'
import { defineQueryLoader } from './defineQueryLoader'
import { expectType } from 'ts-expect'
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
import { NavigationResult } from './navigation-guard'
import {
NavigationResult,
setCurrentContext,
} from 'unplugin-vue-router/runtime'
import { testDefineLoader } from '../../tests/data-loaders'
import { enableAutoUnmount } from '@vue/test-utils'
import { setCurrentContext } from './utils'

describe.skip('defineQueryLoader', () => {
enableAutoUnmount(afterEach)
Expand Down
9 changes: 2 additions & 7 deletions src/data-loaders/defineQueryLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,7 @@ import {
NAVIGATION_RESULTS_KEY,
STAGED_NO_VALUE,
} from './meta-extensions'
import {
IS_CLIENT,
assign,
getCurrentContext,
setCurrentContext,
} from './utils'
import { assign, getCurrentContext, setCurrentContext } from './utils'
import { type Ref, ref, shallowRef } from 'vue'
import { NavigationResult } from './navigation-guard'
import {
Expand Down Expand Up @@ -181,7 +176,7 @@ export function defineQueryLoader<Data, isLazy extends boolean>(
if (entry.pendingLoad === currentLoad) {
error.value = e
// propagate error if non lazy or during SSR
if (!options.lazy || !IS_CLIENT) {
if (!options.lazy || !isSSR) {
return Promise.reject(e)
}
}
Expand Down
9 changes: 2 additions & 7 deletions src/data-loaders/defineVueFireLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,14 @@ import {
DataLoaderEntryBase,
_DataMaybeLazy,
UseDataLoaderResult,
} from './createDataLoader'
import {
IS_CLIENT,
assign,
getCurrentContext,
setCurrentContext,
} from './utils'
import {
APP_KEY,
IS_USE_DATA_LOADER_KEY,
LOADER_ENTRIES_KEY,
STAGED_NO_VALUE,
} from './meta-extensions'
} from 'unplugin-vue-router/runtime'
import { Ref, UnwrapRef, ref, shallowRef } from 'vue'

export function defineVueFireLoader<
Expand Down Expand Up @@ -125,7 +120,7 @@ export function defineVueFireLoader<
if (entry.pendingLoad === currentLoad) {
error.value = e
// propagate error if non lazy or during SSR
if (!options.lazy || !IS_CLIENT) {
if (!options.lazy || isSSR) {
return Promise.reject(e)
}
}
Expand Down
24 changes: 12 additions & 12 deletions src/data-loaders/entries/basic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ export type {
DefineDataLoaderOptions,
} from '../defineLoader'

export type {
UseDataLoader,
UseDataLoaderInternals,
UseDataLoaderResult,
DataLoaderContextBase,
DataLoaderEntryBase,
DefineDataLoaderOptionsBase,
DefineLoaderFn,
_DataMaybeLazy,
DefineDataLoader,
DefineDataLoaderCommit,
} from '../createDataLoader'
// export type {
// UseDataLoader,
// UseDataLoaderInternals,
// UseDataLoaderResult,
// DataLoaderContextBase,
// DataLoaderEntryBase,
// DefineDataLoaderOptionsBase,
// DefineLoaderFn,
// _DataMaybeLazy,
// DefineDataLoader,
// DefineDataLoaderCommit,
// } from '../createDataLoader'
24 changes: 12 additions & 12 deletions src/data-loaders/entries/pinia-colada.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ export type {
UseDataLoaderColada,
UseDataLoaderColadaResult,
} from '../defineColadaLoader'
export type {
UseDataLoader,
UseDataLoaderInternals,
UseDataLoaderResult,
DataLoaderContextBase,
DataLoaderEntryBase,
DefineDataLoaderOptionsBase,
DefineLoaderFn,
_DataMaybeLazy,
DefineDataLoader,
DefineDataLoaderCommit,
} from '../createDataLoader'
// export type {
// UseDataLoader,
// UseDataLoaderInternals,
// UseDataLoaderResult,
// DataLoaderContextBase,
// DataLoaderEntryBase,
// DefineDataLoaderOptionsBase,
// DefineLoaderFn,
// _DataMaybeLazy,
// DefineDataLoader,
// DefineDataLoaderCommit,
// } from '../createDataLoader'

0 comments on commit bc5c378

Please sign in to comment.