From 7d899a9ff65a0faa13cfb376b0efe2d0866ef52f Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 2 Sep 2022 16:30:07 +0900 Subject: [PATCH 1/8] refactor(types): move dep types to src/dep-types --- .eslintrc.cjs | 2 +- CONTRIBUTING.md | 2 +- packages/vite/package.json | 1 + packages/vite/scripts/patchTypes.ts | 43 +++++++++++++------ packages/vite/src/client/tsconfig.json | 7 ++- .../vite/{types => src/dep-types}/alias.d.ts | 0 .../{types => src/dep-types}/anymatch.d.ts | 0 .../{types => src/dep-types}/chokidar.d.ts | 0 .../{types => src/dep-types}/commonjs.d.ts | 0 .../{types => src/dep-types}/connect.d.ts | 0 .../dep-types}/dynamicImportVars.d.ts | 0 .../{types => src/dep-types}/http-proxy.d.ts | 0 packages/vite/src/dep-types/package.json | 3 ++ .../vite/{types => src/dep-types}/shims.d.ts | 0 .../vite/{types => src/dep-types}/terser.d.ts | 0 .../vite/{types => src/dep-types}/ws.d.ts | 0 packages/vite/src/node/build.ts | 6 +-- packages/vite/src/node/config.ts | 2 +- packages/vite/src/node/http.ts | 2 +- packages/vite/src/node/index.ts | 18 ++++---- packages/vite/src/node/plugins/css.ts | 2 +- packages/vite/src/node/plugins/terser.ts | 2 +- packages/vite/src/node/preview.ts | 2 +- packages/vite/src/node/server/index.ts | 4 +- .../vite/src/node/server/middlewares/base.ts | 2 +- .../vite/src/node/server/middlewares/error.ts | 2 +- .../src/node/server/middlewares/indexHtml.ts | 2 +- .../vite/src/node/server/middlewares/proxy.ts | 4 +- .../node/server/middlewares/spaFallback.ts | 2 +- .../src/node/server/middlewares/static.ts | 2 +- .../vite/src/node/server/middlewares/time.ts | 2 +- .../src/node/server/middlewares/transform.ts | 2 +- packages/vite/src/node/server/ws.ts | 2 +- packages/vite/src/node/tsconfig.json | 8 +++- packages/vite/src/node/utils.ts | 2 +- packages/vite/src/node/watch.ts | 2 +- pnpm-lock.yaml | 2 + 37 files changed, 81 insertions(+), 49 deletions(-) rename packages/vite/{types => src/dep-types}/alias.d.ts (100%) rename packages/vite/{types => src/dep-types}/anymatch.d.ts (100%) rename packages/vite/{types => src/dep-types}/chokidar.d.ts (100%) rename packages/vite/{types => src/dep-types}/commonjs.d.ts (100%) rename packages/vite/{types => src/dep-types}/connect.d.ts (100%) rename packages/vite/{types => src/dep-types}/dynamicImportVars.d.ts (100%) rename packages/vite/{types => src/dep-types}/http-proxy.d.ts (100%) create mode 100644 packages/vite/src/dep-types/package.json rename packages/vite/{types => src/dep-types}/shims.d.ts (100%) rename packages/vite/{types => src/dep-types}/terser.d.ts (100%) rename packages/vite/{types => src/dep-types}/ws.d.ts (100%) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index e14beca6015d94..2ce0e4fbf59c67 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -131,7 +131,7 @@ module.exports = defineConfig({ } }, { - files: ['packages/vite/types/**', '*.spec.ts'], + files: ['packages/vite/src/dep-types/**', '*.spec.ts'], rules: { 'node/no-extraneous-import': 'off' } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 350f36b0f25351..f2f04ce43f86c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -218,7 +218,7 @@ Avoid deps with large transitive dependencies that result in bloated size compar Vite aims to be fully usable as a dependency in a TypeScript project (e.g. it should provide proper typings for VitePress), and also in `vite.config.ts`. This means technically a dependency whose types are exposed needs to be part of `dependencies` instead of `devDependencies`. However, this also means we won't be able to bundle it. -To get around this, we inline some of these dependencies' types in `packages/vite/types`. This way, we can still expose the typing but bundle the dependency's source code. +To get around this, we inline some of these dependencies' types in `packages/vite/src/dep-types`. This way, we can still expose the typing but bundle the dependency's source code. Use `pnpm run check-dist-types` to check that the bundled types do not rely on types in `devDependencies`. If you are adding `dependencies`, make sure to configure `tsconfig.check.json`. diff --git a/packages/vite/package.json b/packages/vite/package.json index 6a00bcc2656ecb..98587aa067ba38 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -116,6 +116,7 @@ "strip-literal": "^0.4.0", "tsconfck": "^2.0.1", "tslib": "^2.4.0", + "dep-types": "link:./src/dep-types", "types": "link:./types", "ufo": "^0.8.5", "ws": "^8.8.1" diff --git a/packages/vite/scripts/patchTypes.ts b/packages/vite/scripts/patchTypes.ts index bdd3953b269aba..c924b81a7b89bd 100644 --- a/packages/vite/scripts/patchTypes.ts +++ b/packages/vite/scripts/patchTypes.ts @@ -3,19 +3,20 @@ import { dirname, relative, resolve } from 'node:path' import { fileURLToPath } from 'node:url' import type { ParseResult } from '@babel/parser' import { parse } from '@babel/parser' -import type { File } from '@babel/types' +import type { File, StringLiteral } from '@babel/types' import colors from 'picocolors' import MagicString from 'magic-string' const dir = dirname(fileURLToPath(import.meta.url)) const tempDir = resolve(dir, '../temp/node') const typesDir = resolve(dir, '../types') +const depTypesDir = resolve(dir, '../src/dep-types') -// walk through the temp dts dir, find all import/export of types/* +// walk through the temp dts dir, find all import/export of types/*, deps-types/* // and rewrite them into relative imports - so that api-extractor actually // includes them in the rolled-up final d.ts file. walkDir(tempDir) -console.log(colors.green(colors.bold(`patched types/* imports`))) +console.log(colors.green(colors.bold(`patched types/*, deps-types/* imports`))) function slash(p: string): string { return p.replace(/\\/g, '/') @@ -49,20 +50,34 @@ function rewriteFile(file: string): void { } for (const statement of ast.program.body) { if ( - (statement.type === 'ImportDeclaration' || - statement.type === 'ExportNamedDeclaration' || - statement.type === 'ExportAllDeclaration') && - statement.source?.value.startsWith('types/') + statement.type === 'ImportDeclaration' || + statement.type === 'ExportNamedDeclaration' || + statement.type === 'ExportAllDeclaration' ) { const source = statement.source - const absoluteTypePath = resolve(typesDir, source.value.slice(6)) - const relativeTypePath = slash(relative(dirname(file), absoluteTypePath)) - str.overwrite( - source.start!, - source.end!, - JSON.stringify(relativeTypePath) - ) + if (source?.value.startsWith('types/')) { + rewriteSource(str, source, file, typesDir, 'types') + } else if (source?.value.startsWith('dep-types/')) { + rewriteSource(str, source, file, depTypesDir, 'dep-types') + } } } writeFileSync(file, str.toString()) } + +function rewriteSource( + str: MagicString, + source: StringLiteral, + rewritingFile: string, + typesDir: string, + typesDirName: string +) { + const absoluteTypePath = resolve( + typesDir, + source.value.slice(typesDirName.length + 1) + ) + const relativeTypePath = slash( + relative(dirname(rewritingFile), absoluteTypePath) + ) + str.overwrite(source.start!, source.end!, JSON.stringify(relativeTypePath)) +} diff --git a/packages/vite/src/client/tsconfig.json b/packages/vite/src/client/tsconfig.json index 10e3e3fee1d5d7..39690e751a03fb 100644 --- a/packages/vite/src/client/tsconfig.json +++ b/packages/vite/src/client/tsconfig.json @@ -1,6 +1,11 @@ { "extends": "../../tsconfig.base.json", - "include": ["./", "../../types"], + "include": [ + "./", + "../../types/customEvent", + "../../types/hmrPayload", + "../../types/importGlob" + ], "compilerOptions": { "types": [], "target": "ES2019", diff --git a/packages/vite/types/alias.d.ts b/packages/vite/src/dep-types/alias.d.ts similarity index 100% rename from packages/vite/types/alias.d.ts rename to packages/vite/src/dep-types/alias.d.ts diff --git a/packages/vite/types/anymatch.d.ts b/packages/vite/src/dep-types/anymatch.d.ts similarity index 100% rename from packages/vite/types/anymatch.d.ts rename to packages/vite/src/dep-types/anymatch.d.ts diff --git a/packages/vite/types/chokidar.d.ts b/packages/vite/src/dep-types/chokidar.d.ts similarity index 100% rename from packages/vite/types/chokidar.d.ts rename to packages/vite/src/dep-types/chokidar.d.ts diff --git a/packages/vite/types/commonjs.d.ts b/packages/vite/src/dep-types/commonjs.d.ts similarity index 100% rename from packages/vite/types/commonjs.d.ts rename to packages/vite/src/dep-types/commonjs.d.ts diff --git a/packages/vite/types/connect.d.ts b/packages/vite/src/dep-types/connect.d.ts similarity index 100% rename from packages/vite/types/connect.d.ts rename to packages/vite/src/dep-types/connect.d.ts diff --git a/packages/vite/types/dynamicImportVars.d.ts b/packages/vite/src/dep-types/dynamicImportVars.d.ts similarity index 100% rename from packages/vite/types/dynamicImportVars.d.ts rename to packages/vite/src/dep-types/dynamicImportVars.d.ts diff --git a/packages/vite/types/http-proxy.d.ts b/packages/vite/src/dep-types/http-proxy.d.ts similarity index 100% rename from packages/vite/types/http-proxy.d.ts rename to packages/vite/src/dep-types/http-proxy.d.ts diff --git a/packages/vite/src/dep-types/package.json b/packages/vite/src/dep-types/package.json new file mode 100644 index 00000000000000..3d6a75c81455a0 --- /dev/null +++ b/packages/vite/src/dep-types/package.json @@ -0,0 +1,3 @@ +{ + "//": "this file is just here to make pnpm happy with --frozen-lockfile" +} diff --git a/packages/vite/types/shims.d.ts b/packages/vite/src/dep-types/shims.d.ts similarity index 100% rename from packages/vite/types/shims.d.ts rename to packages/vite/src/dep-types/shims.d.ts diff --git a/packages/vite/types/terser.d.ts b/packages/vite/src/dep-types/terser.d.ts similarity index 100% rename from packages/vite/types/terser.d.ts rename to packages/vite/src/dep-types/terser.d.ts diff --git a/packages/vite/types/ws.d.ts b/packages/vite/src/dep-types/ws.d.ts similarity index 100% rename from packages/vite/types/ws.d.ts rename to packages/vite/src/dep-types/ws.d.ts diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 21cdce31180e5d..a994182750bbc7 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -16,10 +16,10 @@ import type { WarningHandler, WatcherOptions } from 'rollup' -import type { Terser } from 'types/terser' +import type { Terser } from 'dep-types/terser' import commonjsPlugin from '@rollup/plugin-commonjs' -import type { RollupCommonJSOptions } from 'types/commonjs' -import type { RollupDynamicImportVarsOptions } from 'types/dynamicImportVars' +import type { RollupCommonJSOptions } from 'dep-types/commonjs' +import type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars' import type { TransformOptions } from 'esbuild' import type { InlineConfig, ResolvedConfig } from './config' import { isDepsOptimizerEnabled, resolveConfig } from './config' diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 4fb0fcc9a15a93..051df99e6bb8f5 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -4,7 +4,7 @@ import { parse as parseUrl, pathToFileURL } from 'node:url' import { performance } from 'node:perf_hooks' import { createRequire } from 'node:module' import colors from 'picocolors' -import type { Alias, AliasOptions } from 'types/alias' +import type { Alias, AliasOptions } from 'dep-types/alias' import aliasPlugin from '@rollup/plugin-alias' import { build } from 'esbuild' import type { RollupOptions } from 'rollup' diff --git a/packages/vite/src/node/http.ts b/packages/vite/src/node/http.ts index 86fa792072cc2e..2da2f30d3afb0f 100644 --- a/packages/vite/src/node/http.ts +++ b/packages/vite/src/node/http.ts @@ -5,7 +5,7 @@ import type { OutgoingHttpHeaders as HttpServerHeaders } from 'node:http' import type { ServerOptions as HttpsServerOptions } from 'node:https' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import colors from 'picocolors' import { isObject } from './utils' import type { ProxyOptions } from './server/middlewares/proxy' diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts index c595ff0aa7e7e3..23107014dbe55a 100644 --- a/packages/vite/src/node/index.ts +++ b/packages/vite/src/node/index.ts @@ -65,7 +65,7 @@ export type { ResolverFunction, ResolverObject, Alias -} from 'types/alias' +} from 'dep-types/alias' export type { IndexHtmlTransform, IndexHtmlTransformHook, @@ -108,19 +108,19 @@ export type { PrunePayload, ErrorPayload } from 'types/hmrPayload' -export type { Connect } from 'types/connect' -export type { WebSocket, WebSocketAlias } from 'types/ws' -export type { HttpProxy } from 'types/http-proxy' +export type { Connect } from 'dep-types/connect' +export type { WebSocket, WebSocketAlias } from 'dep-types/ws' +export type { HttpProxy } from 'dep-types/http-proxy' export type { FSWatcher, WatchOptions, AwaitWriteFinishOptions -} from 'types/chokidar' -export type { Terser } from 'types/terser' -export type { RollupCommonJSOptions } from 'types/commonjs' -export type { RollupDynamicImportVarsOptions } from 'types/dynamicImportVars' +} from 'dep-types/chokidar' +export type { Terser } from 'dep-types/terser' +export type { RollupCommonJSOptions } from 'dep-types/commonjs' +export type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars' export type { CustomEventMap, InferCustomEventPayload } from 'types/customEvent' -export type { Matcher, AnymatchPattern, AnymatchFn } from 'types/anymatch' +export type { Matcher, AnymatchPattern, AnymatchFn } from 'dep-types/anymatch' export type { ImportGlobFunction, ImportGlobEagerFunction, diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index aebb3286584662..6737e5be1c26b6 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -18,7 +18,7 @@ import type * as PostCSS from 'postcss' import type Sass from 'sass' import type Stylus from 'stylus' import type Less from 'less' -import type { Alias } from 'types/alias' +import type { Alias } from 'dep-types/alias' import type { TransformOptions } from 'esbuild' import { formatMessages, transform } from 'esbuild' import type { RawSourceMap } from '@ampproject/remapping' diff --git a/packages/vite/src/node/plugins/terser.ts b/packages/vite/src/node/plugins/terser.ts index 6362ca0b726fbf..bfbb924032d120 100644 --- a/packages/vite/src/node/plugins/terser.ts +++ b/packages/vite/src/node/plugins/terser.ts @@ -1,5 +1,5 @@ import { Worker } from 'okie' -import type { Terser } from 'types/terser' +import type { Terser } from 'dep-types/terser' import type { Plugin } from '../plugin' import type { ResolvedConfig } from '..' import { requireResolveFromRootWithFallback } from '../utils' diff --git a/packages/vite/src/node/preview.ts b/packages/vite/src/node/preview.ts index bebd212217d384..eb8abb47b7699f 100644 --- a/packages/vite/src/node/preview.ts +++ b/packages/vite/src/node/preview.ts @@ -2,7 +2,7 @@ import path from 'node:path' import type * as http from 'node:http' import sirv from 'sirv' import connect from 'connect' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import corsMiddleware from 'cors' import type { ResolvedServerOptions, ResolvedServerUrls } from './server' import type { CommonServerOptions } from './http' diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index f51dfb8b19401d..6e62fe344d9ba1 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -7,8 +7,8 @@ import connect from 'connect' import corsMiddleware from 'cors' import colors from 'picocolors' import chokidar from 'chokidar' -import type { FSWatcher, WatchOptions } from 'types/chokidar' -import type { Connect } from 'types/connect' +import type { FSWatcher, WatchOptions } from 'dep-types/chokidar' +import type { Connect } from 'dep-types/connect' import launchEditorMiddleware from 'launch-editor-middleware' import type { SourceMap } from 'rollup' import type { CommonServerOptions } from '../http' diff --git a/packages/vite/src/node/server/middlewares/base.ts b/packages/vite/src/node/server/middlewares/base.ts index 002ec111335128..27960f900b44b7 100644 --- a/packages/vite/src/node/server/middlewares/base.ts +++ b/packages/vite/src/node/server/middlewares/base.ts @@ -1,4 +1,4 @@ -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import type { ViteDevServer } from '..' // this middleware is only active when (config.base !== '/') diff --git a/packages/vite/src/node/server/middlewares/error.ts b/packages/vite/src/node/server/middlewares/error.ts index c43901a5b0a265..643e90a5c38e83 100644 --- a/packages/vite/src/node/server/middlewares/error.ts +++ b/packages/vite/src/node/server/middlewares/error.ts @@ -1,6 +1,6 @@ import colors from 'picocolors' import type { RollupError } from 'rollup' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import strip from 'strip-ansi' import type { ErrorPayload } from 'types/hmrPayload' import { pad } from '../../utils' diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 3206734862baf0..a9de3793574fd0 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -2,7 +2,7 @@ import fs from 'node:fs' import path from 'node:path' import MagicString from 'magic-string' import type { SourceMapInput } from 'rollup' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import type { DefaultTreeAdapterMap, Token } from 'parse5' import type { IndexHtmlTransformHook } from '../../plugins/html' import { diff --git a/packages/vite/src/node/server/middlewares/proxy.ts b/packages/vite/src/node/server/middlewares/proxy.ts index f08f69091f1c68..2958d70163fec6 100644 --- a/packages/vite/src/node/server/middlewares/proxy.ts +++ b/packages/vite/src/node/server/middlewares/proxy.ts @@ -1,8 +1,8 @@ import type * as http from 'node:http' import type * as net from 'node:net' import httpProxy from 'http-proxy' -import type { Connect } from 'types/connect' -import type { HttpProxy } from 'types/http-proxy' +import type { Connect } from 'dep-types/connect' +import type { HttpProxy } from 'dep-types/http-proxy' import colors from 'picocolors' import { HMR_HEADER } from '../ws' import { createDebugger, isObject } from '../../utils' diff --git a/packages/vite/src/node/server/middlewares/spaFallback.ts b/packages/vite/src/node/server/middlewares/spaFallback.ts index 6970eef9df5706..6f5b645cd02429 100644 --- a/packages/vite/src/node/server/middlewares/spaFallback.ts +++ b/packages/vite/src/node/server/middlewares/spaFallback.ts @@ -1,7 +1,7 @@ import fs from 'node:fs' import path from 'node:path' import history from 'connect-history-api-fallback' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import { createDebugger } from '../../utils' export function spaFallbackMiddleware( diff --git a/packages/vite/src/node/server/middlewares/static.ts b/packages/vite/src/node/server/middlewares/static.ts index 1c71529ef72e79..ca466b8dbffb6c 100644 --- a/packages/vite/src/node/server/middlewares/static.ts +++ b/packages/vite/src/node/server/middlewares/static.ts @@ -2,7 +2,7 @@ import path from 'node:path' import type { OutgoingHttpHeaders, ServerResponse } from 'node:http' import type { Options } from 'sirv' import sirv from 'sirv' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import micromatch from 'micromatch' import type { ViteDevServer } from '../..' import { FS_PREFIX } from '../../constants' diff --git a/packages/vite/src/node/server/middlewares/time.ts b/packages/vite/src/node/server/middlewares/time.ts index 41a42f63270e50..7fdc7172f1ed58 100644 --- a/packages/vite/src/node/server/middlewares/time.ts +++ b/packages/vite/src/node/server/middlewares/time.ts @@ -1,5 +1,5 @@ import { performance } from 'node:perf_hooks' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import { createDebugger, prettifyUrl, timeFrom } from '../../utils' const logTime = createDebugger('vite:time') diff --git a/packages/vite/src/node/server/middlewares/transform.ts b/packages/vite/src/node/server/middlewares/transform.ts index 1bba1711e1b326..929c6856d34748 100644 --- a/packages/vite/src/node/server/middlewares/transform.ts +++ b/packages/vite/src/node/server/middlewares/transform.ts @@ -1,6 +1,6 @@ import { promises as fs } from 'node:fs' import path from 'node:path' -import type { Connect } from 'types/connect' +import type { Connect } from 'dep-types/connect' import colors from 'picocolors' import type { ViteDevServer } from '..' import { diff --git a/packages/vite/src/node/server/ws.ts b/packages/vite/src/node/server/ws.ts index 54eaa21e94de45..cb8555122b6840 100644 --- a/packages/vite/src/node/server/ws.ts +++ b/packages/vite/src/node/server/ws.ts @@ -6,7 +6,7 @@ import type { Socket } from 'node:net' import colors from 'picocolors' import type { ServerOptions, WebSocket as WebSocketRaw } from 'ws' import { WebSocketServer as WebSocketServerRaw } from 'ws' -import type { WebSocket as WebSocketTypes } from 'types/ws' +import type { WebSocket as WebSocketTypes } from 'dep-types/ws' import type { CustomPayload, ErrorPayload, HMRPayload } from 'types/hmrPayload' import type { InferCustomEventPayload } from 'types/customEvent' import type { ResolvedConfig } from '..' diff --git a/packages/vite/src/node/tsconfig.json b/packages/vite/src/node/tsconfig.json index 270b34189571e1..384cb33b24c8b1 100644 --- a/packages/vite/src/node/tsconfig.json +++ b/packages/vite/src/node/tsconfig.json @@ -1,6 +1,12 @@ { "extends": "../../tsconfig.base.json", - "include": ["./", "../../types"], + "include": [ + "./", + "../dep-types", + "../../types/customEvent", + "../../types/hmrPayload", + "../../types/importGlob" + ], "exclude": ["**/__tests__"], "compilerOptions": { "lib": ["ESNext", "DOM"] diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index d63691f3cdc922..8243dbcb831b63 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -14,7 +14,7 @@ import remapping from '@ampproject/remapping' import type { DecodedSourceMap, RawSourceMap } from '@ampproject/remapping' import colors from 'picocolors' import debug from 'debug' -import type { Alias, AliasOptions } from 'types/alias' +import type { Alias, AliasOptions } from 'dep-types/alias' import type MagicString from 'magic-string' import type { TransformResult } from 'rollup' diff --git a/packages/vite/src/node/watch.ts b/packages/vite/src/node/watch.ts index 378610e28f3799..47a455a0cd0e76 100644 --- a/packages/vite/src/node/watch.ts +++ b/packages/vite/src/node/watch.ts @@ -1,4 +1,4 @@ -import type { WatchOptions } from 'types/chokidar' +import type { WatchOptions } from 'dep-types/chokidar' export function resolveChokidarOptions( options: WatchOptions | undefined diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d459cc2893bd6..61923b12ab5d20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -231,6 +231,7 @@ importers: cors: ^2.8.5 cross-spawn: ^7.0.3 debug: ^4.3.4 + dep-types: link:./src/dep-types dotenv: ^14.3.2 dotenv-expand: ^5.1.0 es-module-lexer: ^1.0.3 @@ -296,6 +297,7 @@ importers: cors: 2.8.5 cross-spawn: 7.0.3 debug: 4.3.4 + dep-types: link:src/dep-types dotenv: 14.3.2 dotenv-expand: 5.1.0 es-module-lexer: 1.0.3 From e02278fdd47c2831a33167227a7b08a8aec9fb5e Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 2 Sep 2022 16:31:14 +0900 Subject: [PATCH 2/8] refactor(types): add facade files for backward compatibility --- packages/vite/types/alias.d.ts | 6 ++++++ packages/vite/types/anymatch.d.ts | 1 + packages/vite/types/chokidar.d.ts | 11 +++++++++++ packages/vite/types/commonjs.d.ts | 1 + packages/vite/types/connect.d.ts | 1 + packages/vite/types/dynamicImportVars.d.ts | 1 + packages/vite/types/http-proxy.d.ts | 1 + packages/vite/types/terser.d.ts | 1 + packages/vite/types/ws.d.ts | 1 + 9 files changed, 24 insertions(+) create mode 100644 packages/vite/types/alias.d.ts create mode 100644 packages/vite/types/anymatch.d.ts create mode 100644 packages/vite/types/chokidar.d.ts create mode 100644 packages/vite/types/commonjs.d.ts create mode 100644 packages/vite/types/connect.d.ts create mode 100644 packages/vite/types/dynamicImportVars.d.ts create mode 100644 packages/vite/types/http-proxy.d.ts create mode 100644 packages/vite/types/terser.d.ts create mode 100644 packages/vite/types/ws.d.ts diff --git a/packages/vite/types/alias.d.ts b/packages/vite/types/alias.d.ts new file mode 100644 index 00000000000000..91f73635584ffb --- /dev/null +++ b/packages/vite/types/alias.d.ts @@ -0,0 +1,6 @@ +export type { + Alias, + ResolverFunction, + ResolverObject, + AliasOptions +} from '../dist/node' diff --git a/packages/vite/types/anymatch.d.ts b/packages/vite/types/anymatch.d.ts new file mode 100644 index 00000000000000..c98e9505f3f90f --- /dev/null +++ b/packages/vite/types/anymatch.d.ts @@ -0,0 +1 @@ +export type { AnymatchFn, AnymatchPattern, Matcher } from '../dist/node' diff --git a/packages/vite/types/chokidar.d.ts b/packages/vite/types/chokidar.d.ts new file mode 100644 index 00000000000000..eae22093bf9d7d --- /dev/null +++ b/packages/vite/types/chokidar.d.ts @@ -0,0 +1,11 @@ +export type { + FSWatcher, + WatchOptions, + AwaitWriteFinishOptions +} from '../dist/node' + +import type { FSWatcher, WatchOptions } from '../dist/node' +export function watch( + paths: string | ReadonlyArray, + options?: WatchOptions +): FSWatcher diff --git a/packages/vite/types/commonjs.d.ts b/packages/vite/types/commonjs.d.ts new file mode 100644 index 00000000000000..8b95405a14257e --- /dev/null +++ b/packages/vite/types/commonjs.d.ts @@ -0,0 +1 @@ +export type { RollupCommonJSOptions } from '../dist/node' diff --git a/packages/vite/types/connect.d.ts b/packages/vite/types/connect.d.ts new file mode 100644 index 00000000000000..50502555f0f56c --- /dev/null +++ b/packages/vite/types/connect.d.ts @@ -0,0 +1 @@ +export type { Connect } from '../dist/node' diff --git a/packages/vite/types/dynamicImportVars.d.ts b/packages/vite/types/dynamicImportVars.d.ts new file mode 100644 index 00000000000000..2d46aaf582de8b --- /dev/null +++ b/packages/vite/types/dynamicImportVars.d.ts @@ -0,0 +1 @@ +export type { RollupDynamicImportVarsOptions } from '../dist/node' diff --git a/packages/vite/types/http-proxy.d.ts b/packages/vite/types/http-proxy.d.ts new file mode 100644 index 00000000000000..54bbefc05c8c48 --- /dev/null +++ b/packages/vite/types/http-proxy.d.ts @@ -0,0 +1 @@ +export type { HttpProxy } from '../dist/node' diff --git a/packages/vite/types/terser.d.ts b/packages/vite/types/terser.d.ts new file mode 100644 index 00000000000000..695795d4df448f --- /dev/null +++ b/packages/vite/types/terser.d.ts @@ -0,0 +1 @@ +export type { Terser } from '../dist/node' diff --git a/packages/vite/types/ws.d.ts b/packages/vite/types/ws.d.ts new file mode 100644 index 00000000000000..3916212d392bff --- /dev/null +++ b/packages/vite/types/ws.d.ts @@ -0,0 +1 @@ +export type { WebSocket, WebSocketAlias } from '../dist/node' From 699efbb398cb2def4373940bf7429f4e836d8d85 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 2 Sep 2022 17:05:28 +0900 Subject: [PATCH 3/8] refactor(types): move types to src/types --- packages/plugin-legacy/tsconfig.json | 1 - packages/plugin-react/tsconfig.json | 1 - packages/plugin-vue-jsx/tsconfig.json | 1 - packages/plugin-vue/tsconfig.json | 1 - packages/vite/package.json | 2 +- packages/vite/scripts/patchTypes.ts | 2 +- packages/vite/src/client/tsconfig.json | 7 +------ packages/vite/src/node/index.ts | 1 + packages/vite/src/node/tsconfig.json | 8 +------- packages/vite/{ => src}/types/customEvent.d.ts | 0 packages/vite/{ => src}/types/hmrPayload.d.ts | 0 packages/vite/{ => src}/types/hot.d.ts | 0 packages/vite/{ => src}/types/importGlob.d.ts | 0 packages/vite/{ => src}/types/importMeta.d.ts | 0 packages/vite/{ => src}/types/package.json | 0 pnpm-lock.yaml | 4 ++-- 16 files changed, 7 insertions(+), 21 deletions(-) rename packages/vite/{ => src}/types/customEvent.d.ts (100%) rename packages/vite/{ => src}/types/hmrPayload.d.ts (100%) rename packages/vite/{ => src}/types/hot.d.ts (100%) rename packages/vite/{ => src}/types/importGlob.d.ts (100%) rename packages/vite/{ => src}/types/importMeta.d.ts (100%) rename packages/vite/{ => src}/types/package.json (100%) diff --git a/packages/plugin-legacy/tsconfig.json b/packages/plugin-legacy/tsconfig.json index ddb60f864b7e6d..bd94458fe2dc28 100644 --- a/packages/plugin-legacy/tsconfig.json +++ b/packages/plugin-legacy/tsconfig.json @@ -12,7 +12,6 @@ "noUnusedLocals": true, "esModuleInterop": true, "paths": { - "types/*": ["../vite/types/*"], "vite": ["../vite/src/node/index.js"] } } diff --git a/packages/plugin-react/tsconfig.json b/packages/plugin-react/tsconfig.json index ddb60f864b7e6d..bd94458fe2dc28 100644 --- a/packages/plugin-react/tsconfig.json +++ b/packages/plugin-react/tsconfig.json @@ -12,7 +12,6 @@ "noUnusedLocals": true, "esModuleInterop": true, "paths": { - "types/*": ["../vite/types/*"], "vite": ["../vite/src/node/index.js"] } } diff --git a/packages/plugin-vue-jsx/tsconfig.json b/packages/plugin-vue-jsx/tsconfig.json index ddb60f864b7e6d..bd94458fe2dc28 100644 --- a/packages/plugin-vue-jsx/tsconfig.json +++ b/packages/plugin-vue-jsx/tsconfig.json @@ -12,7 +12,6 @@ "noUnusedLocals": true, "esModuleInterop": true, "paths": { - "types/*": ["../vite/types/*"], "vite": ["../vite/src/node/index.js"] } } diff --git a/packages/plugin-vue/tsconfig.json b/packages/plugin-vue/tsconfig.json index d3a45a1b69dbd3..4bb9f95e2328ec 100644 --- a/packages/plugin-vue/tsconfig.json +++ b/packages/plugin-vue/tsconfig.json @@ -14,7 +14,6 @@ "esModuleInterop": true, "baseUrl": ".", "paths": { - "types/*": ["../vite/types/*"], "vite": ["../vite/src/node/index.js"] } } diff --git a/packages/vite/package.json b/packages/vite/package.json index 98587aa067ba38..04b5bf47201d9d 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -117,7 +117,7 @@ "tsconfck": "^2.0.1", "tslib": "^2.4.0", "dep-types": "link:./src/dep-types", - "types": "link:./types", + "types": "link:./src/types", "ufo": "^0.8.5", "ws": "^8.8.1" }, diff --git a/packages/vite/scripts/patchTypes.ts b/packages/vite/scripts/patchTypes.ts index c924b81a7b89bd..8d86c9c7b76292 100644 --- a/packages/vite/scripts/patchTypes.ts +++ b/packages/vite/scripts/patchTypes.ts @@ -9,7 +9,7 @@ import MagicString from 'magic-string' const dir = dirname(fileURLToPath(import.meta.url)) const tempDir = resolve(dir, '../temp/node') -const typesDir = resolve(dir, '../types') +const typesDir = resolve(dir, '../src/types') const depTypesDir = resolve(dir, '../src/dep-types') // walk through the temp dts dir, find all import/export of types/*, deps-types/* diff --git a/packages/vite/src/client/tsconfig.json b/packages/vite/src/client/tsconfig.json index 39690e751a03fb..a7b763fdf2e37c 100644 --- a/packages/vite/src/client/tsconfig.json +++ b/packages/vite/src/client/tsconfig.json @@ -1,11 +1,6 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "./", - "../../types/customEvent", - "../../types/hmrPayload", - "../../types/importGlob" - ], + "include": ["./", "../types"], "compilerOptions": { "types": [], "target": "ES2019", diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts index 23107014dbe55a..0f4a71c3275b56 100644 --- a/packages/vite/src/node/index.ts +++ b/packages/vite/src/node/index.ts @@ -125,6 +125,7 @@ export type { ImportGlobFunction, ImportGlobEagerFunction, ImportGlobOptions, + GeneralImportGlobOptions, KnownAsTypeMap } from 'types/importGlob' diff --git a/packages/vite/src/node/tsconfig.json b/packages/vite/src/node/tsconfig.json index 384cb33b24c8b1..bfaac1db6cbf00 100644 --- a/packages/vite/src/node/tsconfig.json +++ b/packages/vite/src/node/tsconfig.json @@ -1,12 +1,6 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "./", - "../dep-types", - "../../types/customEvent", - "../../types/hmrPayload", - "../../types/importGlob" - ], + "include": ["./", "../dep-types", "../types"], "exclude": ["**/__tests__"], "compilerOptions": { "lib": ["ESNext", "DOM"] diff --git a/packages/vite/types/customEvent.d.ts b/packages/vite/src/types/customEvent.d.ts similarity index 100% rename from packages/vite/types/customEvent.d.ts rename to packages/vite/src/types/customEvent.d.ts diff --git a/packages/vite/types/hmrPayload.d.ts b/packages/vite/src/types/hmrPayload.d.ts similarity index 100% rename from packages/vite/types/hmrPayload.d.ts rename to packages/vite/src/types/hmrPayload.d.ts diff --git a/packages/vite/types/hot.d.ts b/packages/vite/src/types/hot.d.ts similarity index 100% rename from packages/vite/types/hot.d.ts rename to packages/vite/src/types/hot.d.ts diff --git a/packages/vite/types/importGlob.d.ts b/packages/vite/src/types/importGlob.d.ts similarity index 100% rename from packages/vite/types/importGlob.d.ts rename to packages/vite/src/types/importGlob.d.ts diff --git a/packages/vite/types/importMeta.d.ts b/packages/vite/src/types/importMeta.d.ts similarity index 100% rename from packages/vite/types/importMeta.d.ts rename to packages/vite/src/types/importMeta.d.ts diff --git a/packages/vite/types/package.json b/packages/vite/src/types/package.json similarity index 100% rename from packages/vite/types/package.json rename to packages/vite/src/types/package.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61923b12ab5d20..e7a2ae5c67ba66 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -266,7 +266,7 @@ importers: strip-literal: ^0.4.0 tsconfck: ^2.0.1 tslib: ^2.4.0 - types: link:./types + types: link:./src/types ufo: ^0.8.5 ws: ^8.8.1 dependencies: @@ -327,7 +327,7 @@ importers: strip-literal: 0.4.0 tsconfck: 2.0.1 tslib: 2.4.0 - types: link:types + types: link:src/types ufo: 0.8.5 ws: 8.8.1 From 22bad14370c478f07ba57d76adb66e3f6f6c06d0 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 2 Sep 2022 17:46:04 +0900 Subject: [PATCH 4/8] refactor(types): bundle client types --- .eslintignore | 2 +- .gitignore | 1 + .prettierignore | 1 + docs/guide/api-plugin.md | 4 +- packages/vite/api-extractor.client.json | 54 +++++++++++++++++++ packages/vite/client.d.ts | 2 +- packages/vite/import-meta.d.ts | 9 ++++ packages/vite/package.json | 19 ++++--- packages/vite/src/client-types.d.ts | 23 ++++++++ .../__snapshots__/fixture.test.ts.snap | 6 +-- .../plugins/importGlob/fixture-a/index.ts | 6 ++- packages/vite/src/types/importMeta.d.ts | 36 +++++-------- playground/hmr/event.d.ts | 4 +- 13 files changed, 127 insertions(+), 40 deletions(-) create mode 100644 packages/vite/api-extractor.client.json create mode 100644 packages/vite/import-meta.d.ts create mode 100644 packages/vite/src/client-types.d.ts diff --git a/.eslintignore b/.eslintignore index 3e795e7a98280b..833faed81beb2b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,4 @@ dist playground-temp temp - +packages/vite/client/types.d.ts diff --git a/.gitignore b/.gitignore index 7f1cab0e1f4356..8aafb6ab143259 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ *.local *.log /.vscode/ +/packages/vite/client/types.d.ts /packages/vite/LICENSE dist dist-ssr diff --git a/.prettierignore b/.prettierignore index b1ea458b9bb9d8..be3598b2ccb5b3 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,3 +9,4 @@ playground/tsconfig-json-load-error/has-error/tsconfig.json playground/html/invalid.html playground/html/valid.html playground/worker/classic-worker.js +packages/vite/client/types.d.ts diff --git a/docs/guide/api-plugin.md b/docs/guide/api-plugin.md index c18c6daca3263f..89860c7cb8ff6a 100644 --- a/docs/guide/api-plugin.md +++ b/docs/guide/api-plugin.md @@ -595,9 +595,9 @@ It is possible to type custom events by extending the `CustomEventMap` interface ```ts // events.d.ts -import 'vite/types/customEvent' +import 'vite/client/types' -declare module 'vite/types/customEvent' { +declare module 'vite/client/types' { interface CustomEventMap { 'custom:foo': { msg: string } // 'event-key': payload diff --git a/packages/vite/api-extractor.client.json b/packages/vite/api-extractor.client.json new file mode 100644 index 00000000000000..81188aa4870d54 --- /dev/null +++ b/packages/vite/api-extractor.client.json @@ -0,0 +1,54 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + + "projectFolder": "./src/client", + + "mainEntryPointFilePath": "./src/client-types.d.ts", + + "dtsRollup": { + "enabled": true, + "untrimmedFilePath": "", + "publicTrimmedFilePath": "./client/types.d.ts" + }, + + "apiReport": { + "enabled": false + }, + + "docModel": { + "enabled": false + }, + + "tsdocMetadata": { + "enabled": false + }, + + "messages": { + "compilerMessageReporting": { + "default": { + "logLevel": "warning" + } + }, + + "extractorMessageReporting": { + "default": { + "logLevel": "warning", + "addToApiReportFile": true + }, + + "ae-missing-release-tag": { + "logLevel": "none" + } + }, + + "tsdocMessageReporting": { + "default": { + "logLevel": "warning" + }, + + "tsdoc-undefined-tag": { + "logLevel": "none" + } + } + } +} diff --git a/packages/vite/client.d.ts b/packages/vite/client.d.ts index e99b4a526b7a58..5ee6940825b119 100644 --- a/packages/vite/client.d.ts +++ b/packages/vite/client.d.ts @@ -1,4 +1,4 @@ -/// +/// // CSS modules type CSSModuleClasses = { readonly [key: string]: string } diff --git a/packages/vite/import-meta.d.ts b/packages/vite/import-meta.d.ts new file mode 100644 index 00000000000000..a054ddf0fa5acc --- /dev/null +++ b/packages/vite/import-meta.d.ts @@ -0,0 +1,9 @@ +import type { + ImportMeta as ViteImportMeta, + ImportMetaEnv as ViteImportMetaEnv +} from './client/types' + +declare global { + interface ImportMeta extends ViteImportMeta {} + interface ImportMetaEnv extends ViteImportMetaEnv {} +} diff --git a/packages/vite/package.json b/packages/vite/package.json index 04b5bf47201d9d..255397eac1a43f 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -20,6 +20,9 @@ "./client": { "types": "./client.d.ts" }, + "./client/types": { + "types": "./client/types.d.ts" + }, "./dist/client/*": "./dist/client/*", "./package.json": "./package.json" }, @@ -27,9 +30,11 @@ "bin", "dist", "client.d.ts", + "import-meta.d.ts", "index.cjs", "src/client", - "types" + "types", + "client/types.d.ts" ], "engines": { "node": "^14.18.0 || >=16.0.0" @@ -47,11 +52,13 @@ "dev": "rimraf dist && pnpm run build-bundle -w", "build": "rimraf dist && run-s build-bundle build-types", "build-bundle": "rollup --config rollup.config.ts --configPlugin typescript", - "build-types": "run-s build-temp-types patch-types roll-types check-dist-types", - "build-temp-types": "tsc --emitDeclarationOnly --outDir temp/node -p src/node", - "patch-types": "tsx scripts/patchTypes.ts", - "roll-types": "api-extractor run && rimraf temp", - "check-dist-types": "tsc --project tsconfig.check.json", + "build-types": "run-p build-node-types build-client-types", + "build-node-types": "run-s build-node-types-temp build-node-types-patch build-node-types-roll build-node-types-check", + "build-node-types-temp": "tsc --emitDeclarationOnly --outDir temp/node -p src/node", + "build-node-types-patch": "tsx scripts/patchTypes.ts", + "build-node-types-roll": "api-extractor run && rimraf temp", + "build-node-types-check": "tsc --project tsconfig.check.json", + "build-client-types": "api-extractor run -c api-extractor.client.json", "lint": "eslint --cache --ext .ts src/**", "format": "prettier --write --cache --parser typescript \"src/**/*.ts\"", "prepublishOnly": "npm run build" diff --git a/packages/vite/src/client-types.d.ts b/packages/vite/src/client-types.d.ts new file mode 100644 index 00000000000000..270a1ac29f2d8b --- /dev/null +++ b/packages/vite/src/client-types.d.ts @@ -0,0 +1,23 @@ +export type { + CustomEventMap, + InferCustomEventPayload +} from './types/customEvent' +export type { + HMRPayload, + ConnectedPayload, + UpdatePayload, + Update, + PrunePayload, + FullReloadPayload, + CustomPayload, + ErrorPayload +} from './types/hmrPayload' +export type { ModuleNamespace, ViteHotContext } from './types/hot' +export type { + ImportGlobOptions, + GeneralImportGlobOptions, + KnownAsTypeMap, + ImportGlobFunction, + ImportGlobEagerFunction +} from './types/importGlob' +export type { ImportMetaEnv, ImportMeta } from './types/importMeta' diff --git a/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap b/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap index 6eeb763c4117bd..f4103222acebdd 100644 --- a/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap +++ b/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap @@ -1,8 +1,7 @@ // Vitest Snapshot v1 exports[`fixture > transform 1`] = ` -"import * as __vite_glob_1_0 from \\"./modules/a.ts\\";import * as __vite_glob_1_1 from \\"./modules/b.ts\\";import * as __vite_glob_1_2 from \\"./modules/index.ts\\";import { name as __vite_glob_3_0 } from \\"./modules/a.ts\\";import { name as __vite_glob_3_1 } from \\"./modules/b.ts\\";import { name as __vite_glob_3_2 } from \\"./modules/index.ts\\";import { default as __vite_glob_5_0 } from \\"./modules/a.ts?raw\\";import { default as __vite_glob_5_1 } from \\"./modules/b.ts?raw\\";import \\"../../../../../../types/importMeta\\"; -export const basic = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\")}); +"import * as __vite_glob_1_0 from \\"./modules/a.ts\\";import * as __vite_glob_1_1 from \\"./modules/b.ts\\";import * as __vite_glob_1_2 from \\"./modules/index.ts\\";import { name as __vite_glob_3_0 } from \\"./modules/a.ts\\";import { name as __vite_glob_3_1 } from \\"./modules/b.ts\\";import { name as __vite_glob_3_2 } from \\"./modules/index.ts\\";import { default as __vite_glob_5_0 } from \\"./modules/a.ts?raw\\";import { default as __vite_glob_5_1 } from \\"./modules/b.ts?raw\\";export const basic = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\")}); export const basicEager = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": __vite_glob_1_0,\\"./modules/b.ts\\": __vite_glob_1_1,\\"./modules/index.ts\\": __vite_glob_1_2}); export const ignore = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\")}); export const namedEager = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": __vite_glob_3_0,\\"./modules/b.ts\\": __vite_glob_3_1,\\"./modules/index.ts\\": __vite_glob_3_2}); @@ -20,8 +19,7 @@ export const cleverCwd2 = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": ( `; exports[`fixture > transform with restoreQueryExtension 1`] = ` -"import * as __vite_glob_1_0 from \\"./modules/a.ts\\";import * as __vite_glob_1_1 from \\"./modules/b.ts\\";import * as __vite_glob_1_2 from \\"./modules/index.ts\\";import { name as __vite_glob_3_0 } from \\"./modules/a.ts\\";import { name as __vite_glob_3_1 } from \\"./modules/b.ts\\";import { name as __vite_glob_3_2 } from \\"./modules/index.ts\\";import { default as __vite_glob_5_0 } from \\"./modules/a.ts?raw\\";import { default as __vite_glob_5_1 } from \\"./modules/b.ts?raw\\";import \\"../../../../../../types/importMeta\\"; -export const basic = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\")}); +"import * as __vite_glob_1_0 from \\"./modules/a.ts\\";import * as __vite_glob_1_1 from \\"./modules/b.ts\\";import * as __vite_glob_1_2 from \\"./modules/index.ts\\";import { name as __vite_glob_3_0 } from \\"./modules/a.ts\\";import { name as __vite_glob_3_1 } from \\"./modules/b.ts\\";import { name as __vite_glob_3_2 } from \\"./modules/index.ts\\";import { default as __vite_glob_5_0 } from \\"./modules/a.ts?raw\\";import { default as __vite_glob_5_1 } from \\"./modules/b.ts?raw\\";export const basic = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\")}); export const basicEager = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": __vite_glob_1_0,\\"./modules/b.ts\\": __vite_glob_1_1,\\"./modules/index.ts\\": __vite_glob_1_2}); export const ignore = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\")}); export const namedEager = /* #__PURE__ */ Object.assign({\\"./modules/a.ts\\": __vite_glob_3_0,\\"./modules/b.ts\\": __vite_glob_3_1,\\"./modules/index.ts\\": __vite_glob_3_2}); diff --git a/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts b/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts index 5a3f6d487ff154..ccf47d4edca6cf 100644 --- a/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts +++ b/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts @@ -1,4 +1,8 @@ -import '../../../../../../types/importMeta' +import type { ImportMeta as ViteImportMeta } from 'types/importMeta' + +declare global { + interface ImportMeta extends ViteImportMeta {} +} export interface ModuleType { name: string diff --git a/packages/vite/src/types/importMeta.d.ts b/packages/vite/src/types/importMeta.d.ts index 54eaa9f4c4c140..794c27c73c102c 100644 --- a/packages/vite/src/types/importMeta.d.ts +++ b/packages/vite/src/types/importMeta.d.ts @@ -1,35 +1,25 @@ -// This file is an augmentation to the built-in ImportMeta interface -// Thus cannot contain any top-level imports -// +import type { ViteHotContext } from './hot' +import type { ImportGlobEagerFunction, ImportGlobFunction } from './importGlob' -/* eslint-disable @typescript-eslint/consistent-type-imports */ - -// Duplicate of import('../src/node/importGlob').GlobOptions in order to -// avoid breaking the production client type. Because this file is referenced -// in vite/client.d.ts and in production src/node/importGlob.ts doesn't exist. -interface GlobOptions { - as?: string +export interface ImportMetaEnv { + [key: string]: any + BASE_URL: string + MODE: string + DEV: boolean + PROD: boolean + SSR: boolean } -interface ImportMeta { +export interface ImportMeta { url: string - readonly hot?: import('./hot').ViteHotContext + readonly hot?: ViteHotContext readonly env: ImportMetaEnv - glob: import('./importGlob').ImportGlobFunction + glob: ImportGlobFunction /** * @deprecated Use `import.meta.glob('*', { eager: true })` instead */ - globEager: import('./importGlob').ImportGlobEagerFunction -} - -interface ImportMetaEnv { - [key: string]: any - BASE_URL: string - MODE: string - DEV: boolean - PROD: boolean - SSR: boolean + globEager: ImportGlobEagerFunction } diff --git a/playground/hmr/event.d.ts b/playground/hmr/event.d.ts index 151a9cc3b861cd..486f66c4dd22ab 100644 --- a/playground/hmr/event.d.ts +++ b/playground/hmr/event.d.ts @@ -1,6 +1,6 @@ -import 'vite/types/customEvent' +import 'vite/client/types' -declare module 'vite/types/customEvent' { +declare module 'vite/client/types' { interface CustomEventMap { 'custom:foo': { msg: string } 'custom:remote-add': { a: number; b: number } From 10ca4277199b846a4666dfbec16da94b0190257e Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 2 Sep 2022 17:06:03 +0900 Subject: [PATCH 5/8] refactor(types): add facade files for backward compatibility --- packages/vite/types/customEvent.d.ts | 1 + packages/vite/types/hmrPayload.d.ts | 10 ++++++++++ packages/vite/types/hot.d.ts | 1 + packages/vite/types/importGlob.d.ts | 7 +++++++ packages/vite/types/importMeta.d.ts | 13 +++++++++++++ 5 files changed, 32 insertions(+) create mode 100644 packages/vite/types/customEvent.d.ts create mode 100644 packages/vite/types/hmrPayload.d.ts create mode 100644 packages/vite/types/hot.d.ts create mode 100644 packages/vite/types/importGlob.d.ts create mode 100644 packages/vite/types/importMeta.d.ts diff --git a/packages/vite/types/customEvent.d.ts b/packages/vite/types/customEvent.d.ts new file mode 100644 index 00000000000000..09fd7dc36ea481 --- /dev/null +++ b/packages/vite/types/customEvent.d.ts @@ -0,0 +1 @@ +export type { CustomEventMap, InferCustomEventPayload } from '../client/types' diff --git a/packages/vite/types/hmrPayload.d.ts b/packages/vite/types/hmrPayload.d.ts new file mode 100644 index 00000000000000..8bbb5e2fdf3e57 --- /dev/null +++ b/packages/vite/types/hmrPayload.d.ts @@ -0,0 +1,10 @@ +export type { + HMRPayload, + ConnectedPayload, + UpdatePayload, + Update, + PrunePayload, + FullReloadPayload, + CustomPayload, + ErrorPayload +} from '../client/types' diff --git a/packages/vite/types/hot.d.ts b/packages/vite/types/hot.d.ts new file mode 100644 index 00000000000000..83727b7019997e --- /dev/null +++ b/packages/vite/types/hot.d.ts @@ -0,0 +1 @@ +export type { ModuleNamespace, ViteHotContext } from '../client/types' diff --git a/packages/vite/types/importGlob.d.ts b/packages/vite/types/importGlob.d.ts new file mode 100644 index 00000000000000..7951020049d0dc --- /dev/null +++ b/packages/vite/types/importGlob.d.ts @@ -0,0 +1,7 @@ +export type { + ImportGlobOptions, + GeneralImportGlobOptions, + KnownAsTypeMap, + ImportGlobFunction, + ImportGlobEagerFunction +} from '../client/types' diff --git a/packages/vite/types/importMeta.d.ts b/packages/vite/types/importMeta.d.ts new file mode 100644 index 00000000000000..97a9518f5d8e4f --- /dev/null +++ b/packages/vite/types/importMeta.d.ts @@ -0,0 +1,13 @@ +import type { + ImportMeta as ViteImportMeta, + ImportMetaEnv as ViteImportMetaEnv +} from '../client/types' + +declare global { + interface GlobOptions { + as?: string + } + + interface ImportMeta extends ViteImportMeta {} + interface ImportMetaEnv extends ViteImportMetaEnv {} +} From 8e2e96de92e96d580081edf9a9dffa8ba9dbf635 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 2 Sep 2022 19:35:40 +0900 Subject: [PATCH 6/8] refactor(types): reorder export in src/node/index.ts --- packages/vite/src/node/index.ts | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts index 0f4a71c3275b56..2bc81f001d6947 100644 --- a/packages/vite/src/node/index.ts +++ b/packages/vite/src/node/index.ts @@ -60,12 +60,6 @@ export type { LogType, LoggerOptions } from './logger' -export type { - AliasOptions, - ResolverFunction, - ResolverObject, - Alias -} from 'dep-types/alias' export type { IndexHtmlTransform, IndexHtmlTransformHook, @@ -108,6 +102,23 @@ export type { PrunePayload, ErrorPayload } from 'types/hmrPayload' +export type { CustomEventMap, InferCustomEventPayload } from 'types/customEvent' +// [deprecated: use vite/client/types instead] +export type { + ImportGlobFunction, + ImportGlobEagerFunction, + ImportGlobOptions, + GeneralImportGlobOptions, + KnownAsTypeMap +} from 'types/importGlob' + +// dep types +export type { + AliasOptions, + ResolverFunction, + ResolverObject, + Alias +} from 'dep-types/alias' export type { Connect } from 'dep-types/connect' export type { WebSocket, WebSocketAlias } from 'dep-types/ws' export type { HttpProxy } from 'dep-types/http-proxy' @@ -119,15 +130,7 @@ export type { export type { Terser } from 'dep-types/terser' export type { RollupCommonJSOptions } from 'dep-types/commonjs' export type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars' -export type { CustomEventMap, InferCustomEventPayload } from 'types/customEvent' export type { Matcher, AnymatchPattern, AnymatchFn } from 'dep-types/anymatch' -export type { - ImportGlobFunction, - ImportGlobEagerFunction, - ImportGlobOptions, - GeneralImportGlobOptions, - KnownAsTypeMap -} from 'types/importGlob' declare module 'rollup' { export interface RenderedChunk { From b8f61942b41e2d624d4b872a1ae55f76e8913e64 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 2 Sep 2022 19:42:12 +0900 Subject: [PATCH 7/8] docs: improve custom event typing --- docs/guide/api-plugin.md | 17 +++++++++++++---- playground/hmr/event.d.ts | 17 ++++++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/docs/guide/api-plugin.md b/docs/guide/api-plugin.md index 89860c7cb8ff6a..33d8ba0e9802b7 100644 --- a/docs/guide/api-plugin.md +++ b/docs/guide/api-plugin.md @@ -595,12 +595,21 @@ It is possible to type custom events by extending the `CustomEventMap` interface ```ts // events.d.ts +import 'vite' import 'vite/client/types' +interface MyCustomEventMap { + 'custom:foo': { msg: string } + // 'event-key': payload +} + +// extend interface for server-side +declare module 'vite' { + interface CustomEventMap extends MyCustomEventMap {} +} + +// extend interface for client-side declare module 'vite/client/types' { - interface CustomEventMap { - 'custom:foo': { msg: string } - // 'event-key': payload - } + interface CustomEventMap extends MyCustomEventMap {} } ``` diff --git a/playground/hmr/event.d.ts b/playground/hmr/event.d.ts index 486f66c4dd22ab..5b4818294ed744 100644 --- a/playground/hmr/event.d.ts +++ b/playground/hmr/event.d.ts @@ -1,9 +1,16 @@ +import 'vite' import 'vite/client/types' +interface MyCustomEventMap { + 'custom:foo': { msg: string } + 'custom:remote-add': { a: number; b: number } + 'custom:remote-add-result': { result: string } +} + +declare module 'vite' { + interface CustomEventMap extends MyCustomEventMap {} +} + declare module 'vite/client/types' { - interface CustomEventMap { - 'custom:foo': { msg: string } - 'custom:remote-add': { a: number; b: number } - 'custom:remote-add-result': { result: string } - } + interface CustomEventMap extends MyCustomEventMap {} } From 5ebf04971cb48a73d1461a45642a3047a7d1c724 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Sat, 3 Sep 2022 17:10:45 +0900 Subject: [PATCH 8/8] fix(types): fix for `moduleResolution: "nodenext"` --- packages/vite/import-meta.d.ts | 3 ++- packages/vite/package.json | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/vite/import-meta.d.ts b/packages/vite/import-meta.d.ts index a054ddf0fa5acc..73baf3c106c74f 100644 --- a/packages/vite/import-meta.d.ts +++ b/packages/vite/import-meta.d.ts @@ -1,7 +1,8 @@ import type { ImportMeta as ViteImportMeta, ImportMetaEnv as ViteImportMetaEnv -} from './client/types' + // eslint-disable-next-line node/no-missing-import -- use .js for `moduleResolution: "nodenext"` +} from './client/types.js' declare global { interface ImportMeta extends ViteImportMeta {} diff --git a/packages/vite/package.json b/packages/vite/package.json index 255397eac1a43f..62622509435391 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -20,6 +20,9 @@ "./client": { "types": "./client.d.ts" }, + "./import-meta": { + "types": "./import-meta.d.ts" + }, "./client/types": { "types": "./client/types.d.ts" },