fix(schema): update vite `import.meta` types (#19338)

This commit is contained in:
Xin Du (Clark) 2023-03-03 10:20:15 +00:00 committed by GitHub
parent 2cf5f48621
commit 654b9a21d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 109 additions and 10 deletions

View File

@ -65,7 +65,7 @@ if (process.dev) {
// Vite
if (import.meta.hot) {
import.meta.hot.accept((newModule) => {
const newConfig = newModule._getAppConfig()
const newConfig = newModule?._getAppConfig()
applyHMR(newConfig)
})
}

View File

@ -1,35 +1,134 @@
/**
* Reference: https://github.com/vitejs/vite/blob/main/packages/vite/types/importMeta.d.ts
*/
export type ModuleNamespace = Record<string, any> & {
[Symbol.toStringTag]: 'Module'
}
export interface ViteHot {
readonly data: any
accept (): void
accept (cb: (mod: any) => void): void
accept (dep: string, cb: (mod: any) => void): void
accept (deps: readonly string[], cb: (mods: any[]) => void): void
accept (cb: (mod: ModuleNamespace | undefined) => void): void
accept (dep: string, cb: (mod: ModuleNamespace | undefined) => void): void
accept (deps: readonly string[], cb: (mods: Array<ModuleNamespace | undefined>) => void): void
acceptExports (exportNames: string | readonly string[], cb?: (mod: ModuleNamespace | undefined) => void): void
dispose (cb: (data: any) => void): void
decline (): void
invalidate (): void
prune (cb: (data: any) => void): void
invalidate (message?: string): void
on (event: any, cb: (payload: any) => void): void
send (event: any, data?: any): void
}
export interface ViteGlobOptions {
as?: string
eager?: boolean
export interface KnownAsTypeMap {
raw: string
url: string
worker: Worker
}
export interface ImportGlobOptions<
Eager extends boolean,
AsType extends string
> {
/**
* Import type for the import url.
*/
as?: AsType
/**
* Import as static or dynamic
*
* @default false
*/
eager?: Eager
/**
* Import only the specific named export. Set to `default` to import the default export.
*/
import?: string
/**
* Custom queries
*/
query?: string | Record<string, string | number | boolean>
/**
* Search files also inside `node_modules/` and hidden directories (e.g. `.git/`). This might have impact on performance.
*
* @default false
*/
exhaustive?: boolean
}
export interface ImportGlobFunction {
/**
* Import a list of files with a glob pattern.
*
* Overload 1: No generic provided, infer the type from `eager` and `as`
*/
<
Eager extends boolean,
As extends string,
T = As extends keyof KnownAsTypeMap ? KnownAsTypeMap[As] : unknown
>(
glob: string | string[],
options?: ImportGlobOptions<Eager, As>
): (Eager extends true
? true
: false) extends true
? Record<string, T>
: Record<string, () => Promise<T>>
/**
* Import a list of files with a glob pattern.
*
* Overload 2: Module generic provided, infer the type from `eager: false`
*/
<M>(
glob: string | string[],
options?: ImportGlobOptions<false, string>
): Record<string, () => Promise<M>>
/**
* Import a list of files with a glob pattern.
*
* Overload 3: Module generic provided, infer the type from `eager: true`
*/
<M>(
glob: string | string[],
options: ImportGlobOptions<true, string>
): Record<string, M>
}
export interface ImportGlobEagerFunction {
/**
* Eagerly import a list of files with a glob pattern.
*
* Overload 1: No generic provided, infer the type from `as`
*/
<
As extends string,
T = As extends keyof KnownAsTypeMap ? KnownAsTypeMap[As] : unknown
>(
glob: string | string[],
options?: Omit<ImportGlobOptions<boolean, As>, 'eager'>
): Record<string, T>
/**
* Eagerly import a list of files with a glob pattern.
*
* Overload 2: Module generic provided
*/
<M>(
glob: string | string[],
options?: Omit<ImportGlobOptions<boolean, string>, 'eager'>
): Record<string, M>
}
export interface ViteImportMeta {
/** Vite client HMR API - see https://vitejs.dev/guide/api-hmr.html */
readonly hot?: ViteHot
/** vite glob import utility - https://vitejs.dev/guide/features.html#glob-import */
glob (glob: string | string[], options?: ViteGlobOptions): Record<string, () => Promise<Record<string, any>>>
glob: ImportGlobFunction
/**
* @deprecated Use `import.meta.glob('*', { eager: true })` instead
*/
globEager: ImportGlobEagerFunction
}