vite-plugin-react-pages
Version:
<p> <a href="https://www.npmjs.com/package/vite-plugin-react-pages" target="_blank" rel="noopener"><img src="https://img.shields.io/npm/v/vite-plugin-react-pages.svg" alt="npm package" /></a> </p>
93 lines (86 loc) • 2.35 kB
text/typescript
import type { File } from '../utils/virtual-module'
export type FindPages = (
pagesDir: string,
helpers: PageHelpers
) => void | Promise<void>
export interface PageHelpers extends PageAPIs {
/**
* Read the static data from a file.
*/
readonly extractStaticData: (file: File) => Promise<{
readonly [key: string]: any
readonly sourceType: string
}>
/**
* Scan the fileSystem and
* set page data in the file handler.
* File deletion will be handled automatically
*/
readonly watchFiles: WatchFilesHelper
}
export interface WatchFilesHelper {
/** Watch all files within a directory (except node_modules and .git) */
(baseDir: string, fileHandler?: FileHandler): void
/** Watch files matching the given glob */
(baseDir: string, glob: string, fileHandler?: FileHandler): void
/** Watch files matching one of the given globs */
(baseDir: string, globs: string[], fileHandler?: FileHandler): void
}
export type FileHandler = (
file: File,
api: PageAPIs
) => void | Promise<void> | DataPiece | Promise<DataPiece>
export interface PageAPIs {
/**
* Get a mutable data object of runtimeData
*/
getRuntimeData: (pageId: string) => {
[key: string]: string
}
/**
* Get a mutable data object of staticData
*/
getStaticData: (pageId: string) => {
[key: string]: any
}
/**
* Add page data.
* If the data already exists, overwrite it.
*/
addPageData: (pageData: DataPiece) => void
}
export interface DataPiece {
/**
* The page route path.
* User can register multiple page data with same pageId,
* as long as they have different keys.
* Page data with same pageId will be merged.
*
* @example '/posts/hello-world'
*/
readonly pageId: string
/**
* The data key.
* For a same page, users can register multiple data pieces,
* each with its own key. (Composed Page Data)
*
* @default 'main'
*/
readonly key?: string
/**
* The path to the runtime data module.
* It will be registered with the `key`.
*/
readonly dataPath?: string
/**
* The value of static data.
* It will be registered with the `key`.
*/
readonly staticData?: any
/**
* when multiple data pieces have same key (conflict),
* the data piece with highest priority will win
* @default 1
*/
readonly priority?: number
}