From bcb19591adbfbc78c66190fd2a3a4c105755a21f Mon Sep 17 00:00:00 2001 From: patak-dev Date: Thu, 23 May 2024 17:51:02 +0200 Subject: [PATCH] feat: createWeakData --- packages/vite/src/node/environment.ts | 14 -------------- packages/vite/src/node/index.ts | 4 ++-- .../src/node/plugins/dynamicImportVars.ts | 5 +++-- packages/vite/src/node/publicUtils.ts | 1 + packages/vite/src/node/utils.ts | 19 +++++++++++++++++++ 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/packages/vite/src/node/environment.ts b/packages/vite/src/node/environment.ts index 1d748eedea96d1..da8fe81b9c62de 100644 --- a/packages/vite/src/node/environment.ts +++ b/packages/vite/src/node/environment.ts @@ -8,17 +8,3 @@ export type Environment = | BuildEnvironment | ScanEnvironment | FutureCompatEnvironment - -export function cachedByEnvironment( - create: (environment: Environment) => Data, -): (environment: Environment) => Data { - const cache = new WeakMap() - return function (environment: Environment) { - let data = cache.get(environment) - if (!data) { - data = create(environment) - cache.set(environment, data) - } - return data - } -} diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts index ce5fec1b02e969..1d88e1cd04da10 100644 --- a/packages/vite/src/node/index.ts +++ b/packages/vite/src/node/index.ts @@ -12,8 +12,7 @@ export { createServer } from './server' export { preview } from './preview' export { build, createBuilder } from './build' -// TODO: Can we remove this? -// export { optimizeDeps } from './optimizer' +export { optimizeDeps } from './optimizer' export { formatPostcssSourceMap, preprocessCSS } from './plugins/css' export { transformWithEsbuild } from './plugins/esbuild' @@ -53,6 +52,7 @@ export type { ResolvedDevEnvironmentOptions, } from './config' export type { Plugin, PluginOption, HookHandler } from './plugin' +export type { Environment } from './environment' export type { FilterPattern } from './utils' export type { CorsOptions, CorsOrigin, CommonServerOptions } from './http' export type { diff --git a/packages/vite/src/node/plugins/dynamicImportVars.ts b/packages/vite/src/node/plugins/dynamicImportVars.ts index 534f52ed690121..04f1ef215754f8 100644 --- a/packages/vite/src/node/plugins/dynamicImportVars.ts +++ b/packages/vite/src/node/plugins/dynamicImportVars.ts @@ -10,6 +10,7 @@ import { CLIENT_ENTRY } from '../constants' import { createIdResolver } from '../idResolver' import { createFilter, + createWeakData, normalizePath, rawRE, requestQueryMaybeEscapedSplitRE, @@ -17,7 +18,7 @@ import { transformStableResult, urlRE, } from '../utils' -import { type Environment, cachedByEnvironment } from '../environment' +import type { Environment } from '../environment' import { toAbsoluteGlob } from './importMetaGlob' import { hasViteIgnoreRE } from './importAnalysis' import { workerOrSharedWorkerRE } from './worker' @@ -174,7 +175,7 @@ export function dynamicImportVarsPlugin(config: ResolvedConfig): Plugin { extensions: [], }) - const getFilter = cachedByEnvironment((environment: Environment) => { + const getFilter = createWeakData((environment: Environment) => { const { include, exclude } = environment.options.build.dynamicImportVarsOptions return createFilter(include, exclude) diff --git a/packages/vite/src/node/publicUtils.ts b/packages/vite/src/node/publicUtils.ts index a9cad7a5106db6..7415f5792e8fc7 100644 --- a/packages/vite/src/node/publicUtils.ts +++ b/packages/vite/src/node/publicUtils.ts @@ -15,6 +15,7 @@ export { mergeConfig, mergeAlias, createFilter, + createWeakData, rollupVersion, } from './utils' export { send } from './server/send' diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index b398ee9d74e969..5bfab27883d621 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -1438,3 +1438,22 @@ export function partialEncodeURIPath(uri: string): string { const postfix = filePath !== uri ? uri.slice(filePath.length) : '' return filePath.replaceAll('%', '%25') + postfix } + +/** + * Creates a function that hides the complexities of a WeakMap with an initial value + * to implement object metadata. Used by plugins to implement cross hooks per + * environment metadata + */ +export function createWeakData( + initial: (key: Key) => Data, +): (key: Key) => Data { + const cache = new WeakMap() + return function (key: Key) { + let data = cache.get(key) + if (!data) { + data = initial(key) + cache.set(key, data) + } + return data + } +}